错误的form_later()钩子行为?

时间:2011-02-10 18:16:35

标签: php drupal hook drupal-modules

我正在使用Drupal 6.19,以便使用form_alter钩子对Web上的一些教程进行一些更改。 很好地识别表单包括测试$ form_id(工作正常),但添加新字段是通过操作$ form变量完成的。 当我在我的代码上尝试这个时它不起作用,所以我试图操纵$ form_id变量而它工作了! 我知道我的问题已经解决但我想知道$ form_id和$ form之间的区别是什么? 是不是$ form_id假设只存储表单标识符?表单内容进入$ form?

2 个答案:

答案 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); 
}

这是奇怪的楠?