Drupal 7 - Hook执行顺序
没有什么文档来说明这个事情,在阅读 "module_implements"
代码的过程中,我获得了变更 Hook 执行顺序的灵感。
下面是 module_implements
中的代码片段
// Allow modules to change the weight of specific implementations but avoid
// an infinite loop.
if ($hook != 'module_implements_alter') {
drupal_alter('module_implements', $implementations[$hook], $hook);
}
所以只要简单的实现一下 "module_implements_alter"
,在代码中对 Module 列表进行重新排序,也就改变了 Hook 的执行顺序。
下面是示例代码:
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;
}
}
这里需要注意 module_list
参数是引用传递。