2010-08-20 136 views
7

如果我有两个模块,每个模块都实现了它的preprocess_node钩子。那么哪一个会先被调用?无论如何要强制执行它的命令?hook_preprocess_node()执行顺序

module1_preprocess_node(&$vars){ 
    $vars['submitted'] = "test1"; 
} 

module2_preprocess_node(&$vars){ 
    $vars['submitted'] = "test2"; 
} 

我想知道哪个会是结果... test1或test2。 在此先感谢

回答

13

Drupal中的所有钩子都以模块权重顺序触发。默认情况下,所有模块的权重均为零,因此如果您想控制它们触发的确切顺序,则需要更改数据库中的某些内容。

How to Update a Module's Weight

如果你看一下module_list() API文档,领带在.module文件的文件名的字母顺序打破。

+1

+1链接更新模块的重量 – 2010-08-21 02:40:51

2

如果模块未在表system中更改其权重,则结果将为test2

调用的第一个模块是重量较轻的模块;当两个模块具有相同的重量时,它们按字母升序排序。 这对每个被调用的钩子都有效。