drupal如何确定不同模块中相同钩子的执行顺序?


22

如果有两个模块A和B且都具有相同的user_login挂钩。因此,当我从首先调用的A_user_login()和B_user_login()函数中登录时,drupal如何确定这两个函数的执行顺序

Answers:


31

挂钩的顺序是

  1. 重量,在数据库中每个模块定义为{system.weight}。较低的权重在呼叫过程中更早出现。
  2. 按字母顺序,按模块名称。

默认情况下,模块的权重为0,因此系统中几乎所有的挂钩都按字母顺序运行。某些模块会在其安装挂钩中对此进行调整,以使它们在该module_invoke_all功能中早晚运行。

另请参阅:调整模块重量:有哪些风险和需要注意的事项?


3
请注意,在D7中有hook_module_implements_alter()
2014年

11

默认情况下,模块权重定义其行内位置以执行hook_ *函数。

您可以使用hook_module_implements_alter更改实现模块的默认顺序。在进一步阅读此博客教程时,可以找到一个小例子。

从该博客文章中,示例实现为:

function mymodule_module_implements_alter(&$module_list, $context){
 if($context === "node_insert"){
 $temp = $module_list['mymodule'];
 // Removing the mymodule key/value
 unset($module_list['mymodule']);
 // Adding the mymodule key value as the last member in the list
 $module_list['mymodule'] = $temp;
 }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.