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


22

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é en premier. et comment drupal décide de l'ordre d'exécution de ces deux fonctions

Réponses:


31

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 la module_invoke_allfonction.

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


3
Remarque en D7 il y a hook_module_implements_alter().
Andy

11

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;
 }
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.