我现在正在接受构建自定义模块的挑战。
我已经开始非常小,只是为了尝试和drupal钩子和模块的理解。
我创建了一个带有一个文本条目的简单表单,唯一的验证是该字段不为空。
在表单提交上,我想写一个自定义表。该表存在。
我的领域是:
nid int(11)
eid int(11)主键自动增量
title varchar(50)
这是我的表格:
function my_module_my_form($form_state) {
$form['esp'] = array(
'#type' => 'fieldset',
'#title' => t('Add a ESP'),
'#collapsible' => TRUE,
'#collapsed' => FALSE,
);
$form['esp']['title'] = array(
'#type' => 'textfield',
'#title' => t('ESP Name'),
'#required' => TRUE,
'#default_value' => '',
'#description' => "Enter the ESP Name",
'#size' => 20,
'#maxlength' => 20,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
return $form;
}
这是我设置的hook_submit()
:
function my_module_my_form_submit($form, $form_state) {
db_query("INSERT INTO my_module_esp (title) VALUES (".$form_state['values']['title'].")");
drupal_set_message(t('The form has been submitted.'));
}
但这不起作用......有什么建议吗? 另外我想在这个表中添加最新的nid,如何获取该值并在db中更新它以免影响任何其他模块?
非常感谢任何帮助
答案 0 :(得分:1)
您需要考虑表单的层次结构。尝试使用:
function my_module_my_form_submit($form, $form_state) {
db_query('INSERT INTO {my_module_esp} (title) VALUES ("%s")', $form_state['values']['esp']['title']);
drupal_set_message(t('The form has been submitted.'));
}
如果您需要为此分配一个nid,那么您应该在代码中创建一个节点,以便301 真正与某些内容相关联。节点表中的主键是auto_increment,因此如果您不在此代码中创建节点,则其他人可以创建博客帖子并分配301.使用node_save()创建节点