Как друпал определить порядок выполнения одного и того же хука в разных модулях?

22

если есть два модуля A и B и оба имеют одинаковый хук user_login. поэтому, когда я вхожу в систему из функций A_user_login () и B_user_login (), которые вызвали first.and, как drupal определяет порядок выполнения этих двух функций

Гилл
источник

Ответы:

31

Крючки называются в порядке

  1. Вес, который определяется на модуль в базе данных как {system.weight}. Меньшие веса приходят раньше в процессе вызова.
  2. В алфавитном порядке, по имени модуля.

По умолчанию модулям присваивается вес 0, поэтому почти все хуки в системе работают в алфавитном порядке. Некоторые модули будут корректировать это в своих установочных хуках, чтобы они запускались раньше или позже в module_invoke_allфункции.

См. Также: Регулировка веса модуля: каковы риски и на что обращать внимание?

mpdonadio
источник
3
Заметка в D7 есть hook_module_implements_alter().
Энди
11

По умолчанию вес модуля определяет его место в строке для выполнения функции hook_ *.

Вы можете изменить порядок реализации модулей по умолчанию с помощью hook_module_implements_alter . Небольшой пример можно найти в дальнейшем чтении этого учебника блога .

Из этого сообщения в блоге пример реализации:

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;
 }
}
tenken
источник