วิธี drupal ตัดสินใจสั่งการดำเนินการของเบ็ดเดียวกันในโมดูลที่แตกต่างกันอย่างไร


22

หากมีสองโมดูล A และ B และทั้งสองมี user_login hook เดียวกัน ดังนั้นเมื่อฉันเข้าสู่ระบบออกจาก A_user_login () และ B_user_login () ฟังก์ชั่นที่หนึ่งเรียกว่า first.and วิธี drupal ตัดสินใจสั่งการดำเนินการของทั้งสองฟังก์ชั่น

คำตอบ:


31

ตะขอถูกเรียกตามลำดับ

  1. น้ำหนักซึ่งถูกกำหนดต่อโมดูลในฐานข้อมูลเป็น {system.weight}น้ำหนักซึ่งถูกกำหนดต่อโมดูลในฐานข้อมูลเป็นน้ำหนักที่ลดลงมาก่อนหน้านี้ในกระบวนการโทร
  2. เรียงตามตัวอักษรตามชื่อโมดูล

ตามค่าเริ่มต้นโมดูลจะกำหนดน้ำหนักเป็น 0 ดังนั้นตะขอเกือบทั้งหมดในระบบจะทำงานตามลำดับตัวอักษร บางโมดูลจะปรับสิ่งนี้ใน hooks การติดตั้งเพื่อให้ทำงานได้เร็วขึ้นหรือช้าลงในmodule_invoke_allฟังก์ชั่น

ดูเพิ่มเติม: การปรับน้ำหนักโมดูล: อะไรคือความเสี่ยงและสิ่งที่ต้องระวัง


3
หมายเหตุใน D7 hook_module_implements_alter()มี
แอนดี้

11

โดยค่าเริ่มต้นน้ำหนักของโมดูลจะกำหนดสถานที่ในบรรทัดเพื่อดำเนินการฟังก์ชัน hook_ *

คุณอาจจะปรับเปลี่ยนการสั่งซื้อเริ่มต้นของการดำเนินการกับโมดูลhook_module_implements_alter ตัวอย่างเล็ก ๆ สามารถอ่านได้จากบทช่วยสอนเกี่ยวกับบล็อกนี้นี้

จากบล็อกนั้นโพสต์ตัวอย่างการใช้งานคือ:

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;
 }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.