Como crio e uso um gancho personalizado?

10

Publiquei uma pergunta aqui , que teve uma sugestão, mas não respondeu. Alguém tem algum conselho sobre como implementar um gancho personalizado no Drupal 8, que permitirá que outros módulos atualizem um índice criado por um módulo pai? O índice será uma lista não ordenada.

Kevin Nowaczyk
fonte
2
Dê uma olhada na seção "Para definir um gancho:" aqui , isso ajuda?
Clive
Apenas parcialmente. Isso explica como criar um gancho para a função filho usar, mas nada sobre como o módulo pai renderiza o conteúdo. O pai usa um controlador para adicionar conteúdo a, digamos, $ output ['table_of_contents'] e, em seguida, o gancho do pai acrescenta os dados retornados do filho a esse array?
21916 Kevin Kevinaczyk
2
@KevinNowaczyk depende da finalidade do gancho. Um gancho não é específico para renderização, mas pode ser usado para isso. Se você deseja criar um gancho personalizado para fornecer conteúdo e invocá-lo no local em que precisa do conteúdo, ele funcionará. E como o gancho é personalizado e novo em sua função, você precisa definir como o gancho deve fornecer seus resultados. Então, se você chamar o gancho durante a função de renderização pai, poderá receber os resultados em um formato utilizável.
Neograph734 14/05

Respostas:

8

Esta seção reside em um controlador no módulo pai:

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

E isso reside no arquivo .module filho [módulo].

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

O pai cria uma matriz e a passa para os filhos por referência. Eles podem alterar a matriz adicionando elementos a ela. O pai então o adiciona à matriz de renderização.

Kevin Nowaczyk
fonte
5

Por uma questão de simplicidade, se você deseja criar e usar um gancho personalizado no drupal 8 para outros desenvolvedores usarem

primeiro para ajudar outras pessoas a definir o uso do seu gancho no arquivo mymodule.api.php, esse gancho pode atuar em qualquer coisa necessária.

exemplo:

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

quando necessário no seu módulo.

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

então o outro desenvolvedor pode fazer uso disso chamando

function MYOTHERMODULE_mymodule_alter_something($data) {
Taggart Jensen
fonte