你在这里

drupal钩子函数前缀问题

主标签

我建了一个主题,名叫:

mytheme

又建了一个模块,名叫:

mymodule

在模块mymodule里,我修改form:

我用函数

mymodule_form_user_register_form_alter 不行,没有被调用

mytheme_form_user_register_form_alter可以,能被调用

这是为什么?感觉反了啊。

Drupal 版本: 

猜你喜欢

去看下drupal_alter函数,所有alter都是经过这个函数的,它同时支持module和theme,不知道mymodule_form_user_register_form_alter 是怎么判断它不行的,试试在函数里面watchdog('debug', '测试')

在user里面根本没有这个hook_user_register_form_alter这个函数.只有form_alter ,id==register_form之类的。

 

drupal7

楼主用到的这个hook是Form 表单操作的一部分,由 HOOK_form_FORM_ID_alter() 形式的钩子表示,是 hook_form_alter() 的一种更小作用范围可选方案。对于 user_register_form 的修改则可以调用相应的 HOOK_form_user_register_form_alter()

详见:http://api.drupal.org/api/drupal/modules!system!system.api.php/function/hook_form_FORM_ID_alter/7

在对于 Form Alter 操作不是很熟练的情况下,楼主可以使用最简的 HOOK_form_alter(&$form, &$form_state, $form_id) 来执行对表单的修改,如:

/**
 * Implements hook_form_alter();
 * @see api.drupal.org/api/drupal/modules!system!system.api.php/function/hook_form_alter/7
 */
function [mymodule]_form_alter(&$form, &$form_state, $form_id) {
  // Alter user register form.
  if ($form_id == 'user_register_form') {
    // Your code here...
  }
}

使用 HOOK_form_FROM_ID_alter() 时则需小心替换 FROM_ID部分