jak drupal decyduje o kolejności wykonania tego samego haka w różnych modułach?

22

jeśli są dwa moduły A i B, a oba mają taki sam hak logowania użytkownika. więc kiedy się loguję. wylogowałem się z funkcji A_user_login () i B_user_login (), które jedna wywołała jako pierwsza. i jak drupal decyduje o kolejności wykonania tych dwóch funkcji

Wypatroszyć
źródło

Odpowiedzi:

31

Haki są wywoływane w kolejności od

  1. Waga, która jest zdefiniowana dla modułu w bazie danych jako {system.weight}. Niższe ciężary pojawiają się wcześniej w procesie wywoływania.
  2. Alfabetycznie według nazwy modułu.

Domyślnie modułom przypisuje się wagę 0, więc prawie wszystkie zaczepy w systemie działają w kolejności alfabetycznej. Niektóre moduły dostosują to w swoich hakach instalacyjnych, aby działały wcześniej lub później w module_invoke_allfunkcji.

Zobacz także: Dostosowanie wagi modułu: na jakie zagrożenia i rzeczy należy uważać?

mpdonadio
źródło
3
Uwaga w D7 jest hook_module_implements_alter().
Andy
11

Domyślnie waga modułów określa swoje miejsce w linii do wykonania funkcji hook_ *.

Możesz zmienić domyślną kolejność modułów implementujących za pomocą hook_module_implements_alter . Mały przykład można znaleźć w dalszej części tego poradnika na blogu .

Z tego postu na blogu przykładowa implementacja to:

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
źródło