You are here

44 实现hook_module_implements_alter

admin 的头像
Submitted by admin on 星期六, 2015-09-19 04:50

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.comBeta5module文件里面,还引入了这段代码:

/**

 * Implements hook_module_implements_alter().

 * 

 * Ensures the call to field_validation_form_field_ui_field_overview_form_alter()

 * function runs after any invocation of the form_alter() by other modules, e.g.

 * Field Group module.

 */

function field_validation_module_implements_alter(&$implementations, $hook) {

  if ($hook == 'form_alter' && array_key_exists('field_validation', $implementations)) {

    $group = $implementations['field_validation'];

    unset($implementations['field_validation']);

    $implementations['field_validation'] = $group;

  }

}

这段代码的作用是,让field_validation模块的钩子hook_form_alter实现,放在最后面执行,这样就不会和field group模块冲突。

我们经常会遇到这样的问题,多个模块同时实现了一个钩子,此时执行的顺序,有时候非常重要,比如hook_form_alter就属于这样的钩子。在以前的情况下,我们采用修改模块重量的方式,简单一些的话,就是直接使用phpmyadmin,打开数据库的system表,直接修改对应模块的重量。复杂一点的话,把它放到安装文件的hook_install钩子里面。

/**

 * Implements hook_install().

 */

function field_validation_install() {

  db_query("UPDATE {system} SET weight = 10 WHERE name = 'field_validation'");

}

    这里顺带说一下,在2.X版本里面,我们实现了对Feeds的集成,实现了hook_feeds_processor_targets_alter这个钩子,但是我们的实现,和Feeds模块自身的实现冲突了,所以我调整了一下模块的重量,通过调整重量,使得程序能够正常工作了.


Drupal版本: