Tôi có thể thay đổi thứ tự thực hiện hook theo các mô-đun khác nhau được gọi không?


7

Trong D6, tôi sử dụng một mô-đun đóng góp, nhưng tôi muốn ghi đè lên một chút hành vi của nó. Tôi có một mô-đun tùy chỉnh cho điều đó, nhưng việc triển khai hook liên quan của tôi được gọi trước khi triển khai trong mô-đun đóng góp, và vì vậy phiên bản của mô-đun đóng góp "thắng".

Có cách nào để thay đổi nó, và buộc cái móc của tôi được gọi là cuối cùng không?

Dưới đây là chi tiết cụ thể:

Tôi muốn xóa tên người dùng "Ẩn danh" mặc định cho người dùng chưa đăng ký trong mẫu nhận xét. Tôi đã tạo một mô-đun tùy chỉnh nhỏ, Tune_comment_form, thực hiện hook form_alter và xóa giá trị mặc định khỏi trường tên ( xem câu trả lời cho câu hỏi trước đó của tôi về điều đó ).

Tuy nhiên, tôi cũng sử dụng một mô-đun contrib gọi là RealName , cũng thực hiện form_alter. RealName thực hiện những gì tôi muốn cho người dùng đã đăng ký (thay thế tên người dùng bằng "tên thật"), nhưng gán lại giá trị mặc định cho trường tên.

Câu trả lời:


7

Vâng, rất đơn giản, bạn cần đặt trọng lượng của mô-đun của bạn nặng hơn. Có một số cách bạn có thể làm điều này, nhưng nếu mô-đun của bạn là mô-đun đóng góp được phát hành trở lại Drupal.org thì cách tốt nhất là đặt nó hook_install()với mã như:

db_query("UPDATE {system} SET weight = 100 WHERE name = 'MYMODULE'");

Ngoài ra, bạn có thể sử dụng mô-đun Tiện ích để đặt trọng lượng mô-đun từ trang mô-đun, tuy nhiên điều này chỉ dành cho cài đặt cá nhân của bạn.


1
Cảm ơn, điều đó rất hữu ích. Tôi đoán nếu tôi chỉ muốn sửa nhanh và không muốn cài đặt mô-đun Tiện ích, tôi chỉ có thể cập nhật cơ sở dữ liệu ...
daphshez

Thông thường, đối với một mô-đun cần chạy sau một mô-đun khác, để thay đổi trọng lượng của chính nó trong bảng "hệ thống". Không có mô-đun nào tôi biết mã phụ thuộc vào mô-đun Tiện ích để thay đổi trọng lượng của chính nó.
kiamlaluno

@kiamlaluno Tôi không đề xuất Tiện ích là phụ thuộc, tôi đã đề xuất nó như một Tiện ích để OP thay đổi trọng lượng trên hệ thống của mình. Nếu anh ta được phát hành một mô-đun đóng góp, thì không, nó chắc chắn sẽ không phải là một giải pháp.
Giải mã

1
Tôi lấy câu hỏi đang được hỏi từ quan điểm của nhà phát triển, và tôi đã gợi ý của bạn là dành cho nhà phát triển. Bây giờ tôi hiểu bạn có nghĩa là để thay đổi trọng lượng của một mô-đun được cài đặt trên trang web của riêng bạn (hoặc bất kỳ trang web nào bạn quản lý) là không cần thiết để tạo một mô-đun tùy chỉnh chỉ để thay đổi trọng lượng của mô-đun khác.
kiamlaluno

4

Cũng giống như thông tin hữu ích bổ sung trong drupal7, bạn có hook_module_implements_alter.

Ở đó, bạn cũng có thể thay đổi móc của các mô-đun khác, ví dụ, di chuyển mô-đun của bạn đến cuối / bắt đầu.


Tôi nghĩ rằng đây nên là câu trả lời được chấp nhận :)
Gokul NK

Bạn có thể cho chúng tôi một ví dụ ngắn?
leymannx

1
function my_module_module_implements_alter(&$implementations, $hook) {
  if ($hook != 'the_hook_to_change') {
    return;
  }
  $module = 'my_module';
  $group = array($module => $implementations[$module]);
  unset($implementations[$module]);

  $implementations = $group + $implementations; // If you want your implementation to run first.
  //$implementations = $group + $implementations; If you want your implementation to run last.
}

Sửa đổi nhỏ dựa trên https://api.drupal.org/comment/48623#comment-48623

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 cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.