Answers:
使用hook_module_implements_alter()
而不是更改模块重量。
来自content_translation.module的示例实现:
function content_translation_module_implements_alter(&$implementations, $hook) {
switch ($hook) {
// Move our hook_entity_type_alter() implementation to the end of the list.
case 'entity_type_alter':
$group = $implementations['content_translation'];
unset($implementations['content_translation']);
$implementations['content_translation'] = $group;
break;
// Move our hook_entity_bundle_info_alter() implementation to the top of the
// list, so that any other hook implementation can rely on bundles being
// correctly marked as translatable.
case 'entity_bundle_info_alter':
$group = $implementations['content_translation'];
$implementations = [
'content_translation' => $group,
] + $implementations;
break;
}
}
hook_module_implements_alter()
(实际上我发生了,我认为这是i18n模块之一)。
现在有一个API:
module_set_weight('your_module_name', 10);
您还可以按照Ivan Jaros所说的那样实现该钩子,这样可以实现更细粒度的控制(例如,第一个钩子是第一个钩子,最后一个钩子是另一个钩子,第三个钩子是特定模块的钩子)。但是模块的重量也应该起作用。
如果使用导入/导出配置,则可以在core.extension.yml
文件中更改模块的重量,模块名称后的数字为重量。
您可以使用模块重量模块:
有时我们需要修改模块的执行顺序,有些人可以编写执行查询的代码来修改系统表中模块的权重,有些人可以直接转到他最喜欢的SQL客户端并直接修改记录。该模块提供了一个界面,可以对模块的重量进行重新排序。
披露:我是Modules Weight模块的维护者。