como drupal decide a ordem de execução do mesmo gancho em diferentes módulos?

22

se houver dois módulos A e B e ambos tiverem o mesmo gancho user_login. Então, quando eu entro. Fora das funções A_user_login () e B_user_login () que foram chamadas primeiro. e como drupal decide a ordem de execução dessas duas funções

GiLL
fonte

Respostas:

31

Os ganchos são chamados na ordem de

  1. Peso, que é definido por módulo no banco de dados como {system.weight}. Pesos mais baixos vêm mais cedo no processo de chamada.
  2. Alfabético, pelo nome do módulo.

Por padrão, os módulos recebem um peso 0, então quase todos os ganchos do sistema são executados em ordem alfabética. Alguns módulos ajustam isso em seus ganchos de instalação para que sejam executados mais cedo ou mais tarde na module_invoke_allfunção.

Consulte também: Ajustando o peso do módulo: quais são os riscos e as coisas a serem observadas?

mpdonadio
fonte
3
Nota em D7 há hook_module_implements_alter().
Andy
11

Por padrão, o peso de um módulo define seu lugar na linha para executar uma função hook_ *.

Você pode alterar a ordem padrão dos módulos de implementação com hook_module_implements_alter . Um pequeno exemplo pode ser encontrado em outras leituras deste tutorial do blog .

A partir dessa publicação do blog, um exemplo de implementação é:

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
fonte