bagaimana drupal memutuskan urutan eksekusi dari hook yang sama dalam modul yang berbeda?

22

jika ada dua modul A dan B dan keduanya memiliki kait user_login yang sama. jadi ketika saya log in. keluar dari fungsi A_user_login () dan B_user_login () yang mana yang disebut first.and bagaimana drupal memutuskan urutan eksekusi dari kedua fungsi ini

Insang
sumber

Jawaban:

31

Kait disebut dalam urutan

  1. Bobot, yang didefinisikan per modul dalam database sebagai {system.weight}. Bobot yang lebih rendah datang lebih awal dalam proses pemanggilan.
  2. Alfabet, dengan nama modul.

Secara default, modul mendapatkan bobot 0, sehingga hampir semua kait dalam sistem berjalan dalam urutan abjad. Beberapa modul akan menyesuaikan ini di kait instalnya sehingga berjalan lebih awal atau lebih lambat dalam module_invoke_allfungsinya.

Lihat juga: Menyesuaikan bobot modul: apa risiko dan hal-hal yang harus diwaspadai?

mpdonadio
sumber
3
Catatan di D7 ada hook_module_implements_alter().
Andy
11

Secara default, bobot modul menentukan tempatnya sesuai untuk menjalankan fungsi hook_ *.

Anda dapat mengubah urutan default dari modul pelaksana dengan hook_module_implements_alter . Contoh kecil dapat ditemukan dalam bacaan lebih lanjut dari tutorial blog ini .

Dari posting blog contoh implementasi adalah:

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
sumber