Một bản vá không nhất thiết phải áp dụng cho phiên bản mới của mô-đun: Nó đủ để chức năng vá được chuyển sang một dòng khác hoặc mã cho chức năng đó được thay đổi và bản vá không còn áp dụng nữa. Đối với chức năng được chuyển đến một dòng khác, đủ để một chức năng khác được viết lại để có nhiều dòng hơn (hoặc ít dòng hơn).
Cách tốt hơn để thay đổi hành vi của mô-đun là, đối với Drupal 7:
- Nếu mô-đun sử dụng mã cho một cuộc gọi lại trang mà bạn muốn thay đổi, hãy thay đổi cuộc gọi lại trang bằng hook_menu_alter () .
- Nếu mô-đun thực hiện một chức năng chủ đề mà bạn muốn thay đổi, hãy thay đổi chức năng được liên kết với hook_theme_registry_alter () . Trong thay thế, nếu nó là đủ để thay đổi các biến chức năng theme được, sau đó bạn có thể thực hiện các chức năng xử lý trước cho rằng chức năng chủ đề (ví dụ như
hook_preprocess_rdf_metadata()
cho theme_rdf_metadata () , và thay đổi các biến mà chức năng chủ đề sẽ nhận được.
- Nếu mô-đun thực thi truy vấn SQL bằng db_select () và gán thẻ cho truy vấn, hãy thay đổi truy vấn đã thực hiện bằng hook_query_alter () .
- Nếu mô-đun thực hiện một hook mà bạn không muốn nó được thực thi, bạn có thể triển khai hook_module_implements_alter () để tránh nó được thực thi.
- Nếu mô-đun thực hiện một hook hook (ví dụ hook_page_alter () ) và bạn muốn thay đổi cái hook đó đã thay đổi, hãy thực hiện hook hook tương tự, hãy chắc chắn rằng nó được thực thi sau khi cái được thực hiện từ mô-đun đó.
Trong trường hợp chức năng bạn muốn thay đổi không phải là một cái móc, thì:
- Kiểm tra chức năng đó có sử dụng móc được thực hiện từ mô-đun khác không. Ví dụ: node_save () gọi hook_node_presave () ; nếu tôi muốn thay đổi thuộc tính "đã thay đổi" của nút, tôi không hack
node_save()
, nhưng tôi thực hiện hook_node_presave()
để thay đổi nó.
- Kiểm tra chức năng đó được tham chiếu / sử dụng từ một cái móc; trong trường hợp đó, bạn có thể làm một cái gì đó cho cái móc đó, như tôi đã mô tả trước đây.
Nếu bất cứ điều gì tôi nói cho đến bây giờ không áp dụng, thì tốt hơn là tạo một mô-đun tùy chỉnh và sử dụng mã của mô-đun khác để tạo mô-đun. Tôi cũng sẽ thử hỏi một yêu cầu tính năng cho mô-đun hiện có, hy vọng tính năng này được triển khai.
Việc hack một mô-đun của bên thứ ba không bao giờ là một ý tưởng hay, đặc biệt là vì các bản cập nhật tự động của mô-đun (thông qua Trình quản lý cập nhật hoặc Drush) sẽ không thể thực hiện được nữa cho mô-đun đó.