Làm cách nào để tạo và sử dụng móc tùy chỉnh?


10

Tôi đã đăng một câu hỏi ở đây , trong đó có một gợi ý, nhưng không có câu trả lời. Có ai có lời khuyên nào về cách triển khai hook tùy chỉnh trong Drupal 8, điều này sẽ cho phép các mô-đun khác cập nhật một bảng nội dung được tạo bởi mô-đun mẹ không? Mục lục sẽ là một danh sách không có thứ tự.


2
Hãy xem phần bên dưới "Để xác định một cái móc:" ở đây , điều đó có giúp ích gì không?
Clive

Chỉ một phần. Điều này giải thích cách tạo một hook cho hàm con để sử dụng, nhưng không có gì về cách mô đun cha biểu hiện nội dung. Phụ huynh có sử dụng bộ điều khiển để thêm nội dung vào, chẳng hạn, $ output ['table_of_contents'] và sau đó hook của cha mẹ sẽ nối thêm dữ liệu được trả về từ con vào mảng này không?
Kevin Nowachot

2
@KevinNowachot nó phụ thuộc vào mục đích của cái móc. Một hook không cụ thể để kết xuất, nhưng có thể được sử dụng cho nó. Nếu bạn muốn tạo một hook tùy chỉnh để cung cấp nội dung và bạn gọi hook ở nơi bạn cần nội dung, nó sẽ hoạt động. Và bởi vì hook là tùy chỉnh và mới đối với chức năng của bạn, bạn phải xác định cách hook sẽ cung cấp kết quả của nó. Sau đó, nếu bạn gọi hook trong chức năng kết xuất cha mẹ, bạn có thể nhận kết quả ở định dạng có thể sử dụng được.
Neograph734

Câu trả lời:


8

Phần này nằm trong bộ điều khiển trong mô đun mẹ:

$plugin_items = [];
// Call modules that implement the hook, and let them add items.
\Drupal::moduleHandler()->alter('flot_examples_toc', $plugin_items);
if (count($plugin_items > 0)) {
  $output['plugins'] = [
    '#title' => 'Plugins',
    '#theme' => 'item_list',
    '#items' => $plugin_items,
  ];
}

Và điều này nằm trong tệp [mô-đun] .module con.

use Drupal\Core\Url;

function mymodule_flot_examples_toc_alter(&$item_list) {
  $options = [
    ':one' => Url::fromRoute('flot_spider_examples.example')->toString(),
  ];
  $item_list[] = t('<a href=":one">Spider Chart</a> (with spider plugin)', $options);
}

Cha mẹ tạo ra một mảng và truyền nó cho con cái bằng cách tham khảo. Họ có thể thay đổi mảng bằng cách thêm các phần tử vào nó. Phụ huynh sau đó thêm nó vào mảng kết xuất.


5

Chỉ vì đơn giản nếu bạn muốn tạo và sử dụng hook tùy chỉnh trong drupal 8 để các nhà phát triển khác sử dụng

đầu tiên để giúp người khác xác định việc sử dụng hook của bạn trong tệp mymodule.api.php hook này có thể hoạt động trên bất kỳ thứ gì được yêu cầu.

thí dụ:

 // my hook 
 function hook_mymodule_alter_something(array &$data) {
   // here others will make a module that will call this to alter "$data"
 }

sau đó khi cần trong mô-đun của bạn.

 \Drupal::moduleHandler()->invokeAll('mymodule_alter_something', [&$data]);

sau đó nhà phát triển khác có thể sử dụng điều này bằng cách gọi

function MYOTHERMODULE_mymodule_alter_something($data) {
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.