Jak utworzyć niestandardowy hak i korzystać z niego?


10

Zadałem tutaj pytanie , które zawierało jedną sugestię, ale bez odpowiedzi. Czy ktoś ma jakieś porady, jak zaimplementować niestandardowy hak w Drupal 8, który pozwoli innym modułom zaktualizować spis treści, który jest tworzony przez moduł nadrzędny? Spis treści będzie listą nieuporządkowaną.


2
Spójrz na sekcję „Aby zdefiniować hak:” tutaj , czy to pomaga?
— Clive

Tylko częściowo. Wyjaśnia to, jak utworzyć zaczep dla funkcji potomnej, ale nic na temat sposobu renderowania zawartości przez moduł nadrzędny. Czy rodzic używa kontrolera, aby dodać zawartość, powiedzmy, $ output ['table_of_contents'], a następnie haczyk rodzica dołącza dane, które są zwracane od dziecka, do tej tablicy?
— Kevin Nowaczyk

2
@KevinNowaczyk to zależy od celu haka. Hak nie jest specyficzny dla renderowania, ale można do niego użyć. Jeśli chcesz utworzyć niestandardowy hak do dostarczania treści i wywołasz hak w miejscu, w którym potrzebujesz treści, zadziała. Ponieważ hak jest niestandardowy i nowy w Twojej funkcji, musisz zdefiniować, w jaki sposób hak powinien zapewniać wyniki. Następnie, jeśli wywołasz hak podczas nadrzędnej funkcji renderowania, możesz otrzymać wyniki w użytecznym formacie.
— Neograph734

Odpowiedzi:


8

Ta sekcja znajduje się w kontrolerze w module nadrzędnym:

$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,
  ];
}

I to znajduje się w pliku podrzędnym [module] .module.

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);
}

Rodzic tworzy tablicę i przekazuje ją do dzieci przez odniesienie. Mogą zmieniać tablicę, dodając do niej elementy. Następnie rodzic dodaje go do tablicy renderowania.


5

Dla uproszczenia, jeśli chcesz stworzyć niestandardowy hak w Drupal 8, z którego mogą korzystać inni programiści

najpierw, aby pomóc innym zdefiniować użycie twojego haka w pliku mymodule.api.php, ten hak może działać na wszystko, co jest wymagane.

przykład:

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

wtedy gdy zajdzie taka potrzeba w twoim module.

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

wtedy drugi programista może to wykorzystać, dzwoniąc

function MYOTHERMODULE_mymodule_alter_something($data) {
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.