Làm thế nào drupal quyết định thứ tự thực hiện của cùng một hook trong các mô-đun khác nhau?


22

nếu có hai mô-đun A và B và cả hai đều có cùng một hook user_login. vì vậy khi tôi đăng nhập

Câu trả lời:


31

Móc được gọi theo thứ tự

  1. Trọng lượng, được xác định cho mỗi mô-đun trong cơ sở dữ liệu là {system.weight}. Trọng lượng thấp hơn đến sớm hơn trong quá trình gọi.
  2. Bảng chữ cái, theo tên mô-đun.

Theo mặc định, các mô-đun được gán trọng số 0, do đó, gần như tất cả các móc trong hệ thống chạy theo thứ tự bảng chữ cái. Một số mô-đun sẽ điều chỉnh điều này trong các móc cài đặt để chúng chạy sớm hơn hoặc muộn hơn trong module_invoke_allchức năng.

Xem thêm: Điều chỉnh trọng lượng mô-đun: những rủi ro và điều cần chú ý là gì?


3
Lưu ý trong D7 có hook_module_implements_alter().
— Andy

11

Theo mặc định, trọng lượng mô-đun xác định vị trí của nó trong dòng để thực thi hàm hook_ *.

Bạn có thể thay đổi thứ tự mặc định của các mô-đun triển khai bằng hook_module_implements_alter . Một ví dụ nhỏ có thể được tìm thấy trong bài đọc thêm của hướng dẫn blog này .

Từ blog đó, một ví dụ thực hiện là:

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;
 }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.