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 参数是引用传递。

Avatar
崔秀龙

简单,是大师的责任;我们凡夫俗子,能做到清楚就很不容易了。

comments powered by Disqus
下一页
上一页

相关