カスタムフックを作成して使用するにはどうすればよいですか?


10

ここに質問を投稿しましたが、提案は1つありましたが、回答はありませんでした。他のモジュールが親モジュールによって作成された目次を更新できるようにするDrupal 8でカスタムフックを実装する方法について誰かアドバイスはありますか?目次は順不同のリストになります。


2
「フックを定義するには:」のセクションをご覧ください。ここで役立ちますか?
クライブ

一部のみ。これは、子関数が使用するフックを作成する方法を説明しますが、親モジュールがコンテンツをレンダリングする方法については説明しません。親はコントローラを使用して、たとえば$ output ['table_of_contents']にコンテンツを追加し、親のフックは子から返されたデータをこの配列に追加しますか?
Kevin Nowaczyk 2016年

2
@KevinNowaczykフックの目的によって異なります。フックはレンダリングに固有のものではありませんが、使用できます。コンテンツを提供するカスタムフックを作成し、コンテンツが必要な場所でフックを呼び出す場合は、機能します。また、フックはカスタムで関数にとって新しいものであるため、フックが結果を提供する方法を定義する必要があります。次に、親レンダリング関数の間にフックを呼び出すと、使用可能な形式で結果を受け取ることができます。
Neograph734 2016年

回答:


8

このセクションは、親モジュールのコントローラーにあります。

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

そして、これは子の[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);
}

親は配列を作成し、それを参照によって子に渡します。要素を追加して配列を変更できます。親はそれをレンダー配列に追加します。


5

他の開発者が使用できるようにdrupal 8でカスタムフックを作成して使用する場合は、簡単にするために

最初に、他の人がmymodule.api.phpファイルでフックの使用を定義するのを助けるために、このフックは必要なあらゆるものに作用できます。

例:

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

その後、モジュールで必要なときに。

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

その後、他の開発者はこれを利用してこれを利用できます

function MYOTHERMODULE_mymodule_alter_something($data) {
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.