我正在使用Drupal 6.19,以便使用form_alter钩子对Web上的一些教程进行一些更改。 很好地识别表单包括测试$ form_id(工作正常),但添加新字段是通过操作$ form变量完成的。 当我在我的代码上尝试这个时它不起作用,所以我试图操纵$ form_id变量而它工作了! 我知道我的问题已经解决但我想知道$ form_id和$ form之间的区别是什么? 是不是$ form_id假设只存储表单标识符?表单内容进入$ form?
答案 0 :(得分:2)
由于您使用的是Drupal 6,因此您使用了错误的hook_form_alter语法。你有什么是钩子的Drupal 5语法。这应该是......
hook_form_alter(& $ form,& $ form_state,$ form_id)
因为你按照自己的方式使用它,$ form_id变量实际上是$ form变量。尝试交换正确的,这将帮助你。
以下是文档的链接:Drupal API: hook_form_alter
答案 1 :(得分:0)
好的,这是我的form_alter钩子的代码: 顺便说一句,我使用dBug来查看变量的内容(这就是我怎么知道$ form不包含表单结构)
function testymodule_form_alter($form_id, &$form) {
include_once("dBug.php");
if ($form_id['#id']=='node-form') {
$form_id['testymodule_checkbox'] = array(
'#type' => 'checkbox',
'#title' => t('Newly testy Checkbox'),
);
new dBug($form_id);
}
这会在上面提到的表格中添加一个新的复选框(虽然它是maniuplate $ form_id而不是$ form)
我在网上发现的是操纵$ form:
function testymodule_form_alter($form_id, &$form) {
include_once("dBug.php");
if ($form_id['#id']=='node-form') {
$form['testymodule_checkbox'] = array( //here is the clue
'#type' => 'checkbox',
'#title' => t('Newly testy Checkbox'),
);
new dBug($form_id);
}
这是奇怪的楠?