come drupal decide l'ordine di esecuzione dello stesso hook in moduli diversi?


22

se sono presenti due moduli A e B ed entrambi hanno lo stesso hook user_login. quindi quando eseguo l'accesso. fuori dalla funzione A_user_login () e B_user_login () che uno ha chiamato per primo. e come drupal decide l'ordine di esecuzione di queste due funzioni

Risposte:


31

I ganci vengono chiamati in ordine di

  1. Peso, che è definito per modulo nel database come {system.weight}. Pesi più bassi vengono prima nel processo di chiamata.
  2. Alfabetico, per nome del modulo.

Per impostazione predefinita, ai moduli viene assegnato un peso di 0, quindi quasi tutti gli hook nel sistema vengono eseguiti in ordine alfabetico. Alcuni moduli lo regoleranno nei loro hook di installazione in modo che vengano eseguiti prima o poi nella module_invoke_allfunzione.

Vedi anche: Regolazione del peso del modulo: quali sono i rischi e le cose a cui prestare attenzione?



11

Per impostazione predefinita, il peso di un modulo definisce la sua posizione in linea per eseguire una funzione hook_ *.

È possibile modificare l'ordine predefinito dei moduli di implementazione con hook_module_implements_alter . Un piccolo esempio può essere trovato nell'ulteriore lettura di questo tutorial sul blog .

Da quel post sul blog un'implementazione di esempio è:

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;
 }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.