web-dev-qa-db-fra.com

comment drupal décider de l'ordre d'exécution du même hook dans différents modules?

s'il y a deux modules A et B et que les deux ont le même hook user_login. donc quand je me connecte. hors des fonctions A_user_login () et B_user_login () que l'on a appelé first.and comment drupal décide de l'ordre d'exécution de ces deux fonctions

22
GiLL

Les crochets sont appelés par ordre de

  1. Poids, défini par module dans la base de données comme {system.weight}. Les poids inférieurs arrivent plus tôt dans le processus d'appel.
  2. Alphabétique, par nom de module.

Par défaut, les modules reçoivent un poids de 0, donc presque tous les hooks du système s'exécutent par ordre alphabétique. Certains modules ajusteront cela dans leurs crochets d'installation afin qu'ils s'exécutent plus tôt ou plus tard dans le module_invoke_all fonction.

Voir aussi: Ajuster le poids du module: quels sont les risques et les choses à surveiller?

31
mpdonadio

Par défaut, le poids d'un module définit sa place en ligne pour exécuter une fonction hook_ *.

Vous pouvez modifier l'ordre par défaut des modules d'implémentation avec hook_module_implements_alter . Un petit exemple peut être trouvé dans la lecture approfondie de ce tutoriel de blog .

À partir de ce billet de blog, un exemple d'implémentation est:

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;
 }
}
11
tenken