¿Cómo decide Drupal el orden de ejecución del mismo gancho en diferentes módulos?

22

si hay dos módulos A y B y ambos tienen el mismo enlace user_login. así que cuando inicio sesión, salgo de la función A_user_login () y B_user_login () a la que se llamó primero. y cómo drupal decide el orden de ejecución de estas dos funciones

Branquia
fuente

Respuestas:

31

Los ganchos se llaman en orden de

  1. Peso, que se define por módulo en la base de datos como {system.weight}. Los pesos más bajos vienen antes en el proceso de llamada.
  2. Alfabético, por nombre de módulo.

Por defecto, a los módulos se les asigna un peso de 0, por lo que casi todos los ganchos del sistema se ejecutan en orden alfabético. Algunos módulos ajustarán esto en sus ganchos de instalación para que se ejecuten antes o después en la module_invoke_allfunción.

Consulte también: Ajuste del peso del módulo: ¿cuáles son los riesgos y las cosas a tener en cuenta?

mpdonadio
fuente
3
Nota en D7 hay hook_module_implements_alter().
Andy
11

Por defecto, el peso de un módulo define su lugar en la línea para ejecutar una función hook_ *.

Puede alterar el orden predeterminado de los módulos de implementación con hook_module_implements_alter . Un pequeño ejemplo se puede encontrar en la lectura adicional de este tutorial del blog .

De esa publicación de blog, un ejemplo de implementación es:

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
fuente