Ответы:
Используйте 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);
Вы также можете реализовать хук, как сказал Иван Ярош, который позволяет более тонко контролировать (например, сначала для одного хука, потом для другого, после определенного модуля для третьего). Но вес модуля тоже должен работать.
Если вы используете конфигурации импорта / экспорта, вы можете изменить вес модуля в core.extension.yml
файле, номер после имени модуля - вес.
Вы можете использовать модуль веса модулей:
Иногда нам нужно изменить порядок выполнения модулей, и некоторые люди могут написать код, который выполняет запрос, чтобы изменить вес модуля в системной таблице, а кто-то может перейти прямо к своему любимому клиенту SQL и напрямую изменить запись. Этот модуль предоставляет интерфейс для изменения порядка веса модулей.
Раскрытие информации: я поддерживаю модуль Вес модулей .