사용자 정의 후크를 작성하고 사용하려면 어떻게합니까?


10

여기 에 하나의 제안이 있지만 답변이없는 질문을 게시했습니다 . 다른 모듈이 부모 모듈에 의해 생성 된 목차를 업데이트 할 수 있도록 Drupal 8에서 사용자 정의 후크를 구현하는 방법에 대한 조언이 있습니까? 목차는 순서가없는 목록이됩니다.


2
아래 섹션에서 찾아 보게한다 "후크를 정의하기를" 여기 , 그 도움을합니까?
Clive

부분적으로 만. 하위 함수가 사용할 후크를 작성하는 방법을 설명하지만 상위 모듈이 컨텐츠를 렌더링하는 방법에 대해서는 설명하지 않습니다. 부모는 컨트롤러를 사용하여 $ output [ 'table_of_contents']에 내용을 추가하고 부모의 후크는 자식에서 반환 된 데이터를이 배열에 추가합니까?
Kevin Nowaczyk

2
@KevinNowaczyk 그것은 후크의 목적에 달려 있습니다. 후크는 렌더링 전용이 아니지만 후크에 사용할 수 있습니다. 컨텐츠를 제공하기 위해 사용자 정의 후크를 작성하고 컨텐츠가 필요한 위치에서 후크를 호출하면 작동합니다. 또한 후크는 사용자 정의되고 기능에 새로운 것이기 때문에 후크가 결과를 제공하는 방법을 정의해야합니다. 그런 다음 부모 렌더링 기능 중에 후크를 호출하면 사용 가능한 형식으로 결과를받을 수 있습니다.
Neograph734

답변:


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.