it-swarm.com.de

Wie erstelle und verwende ich einen benutzerdefinierten Hook?

Ich habe eine Frage gepostet hier , die einen Vorschlag hatte, aber keine Antwort. Hat jemand Ratschläge zum Implementieren eines benutzerdefinierten Hooks in Drupal 8, mit dem andere Module ein Inhaltsverzeichnis aktualisieren können, das von einem übergeordneten Modul erstellt wurde? Das Inhaltsverzeichnis ist ein ungeordnete Liste.

10
Kevin Nowaczyk

Dieser Abschnitt befindet sich in einem Controller im übergeordneten Modul:

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

Und dies befindet sich in der untergeordneten [Modul] .module-Datei.

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

Das übergeordnete Element erstellt ein Array und übergibt es als Referenz an die untergeordneten Elemente. Sie können das Array ändern, indem Sie ihm Elemente hinzufügen. Das übergeordnete Element fügt es dann dem Render-Array hinzu.

8
Kevin Nowaczyk

Nur der Einfachheit halber, wenn Sie einen benutzerdefinierten Hook in drupal 8) erstellen und verwenden möchten, den andere Entwickler verwenden können

um anderen zu helfen, die Verwendung Ihres Hooks in der Datei mymodule.api.php zu definieren, kann dieser Hook auf alles reagieren, was erforderlich ist.

beispiel:

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

dann bei Bedarf in Ihrem Modul.

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

dann kann der andere Entwickler dies durch Aufrufen nutzen

function MYOTHERMODULE_mymodule_alter_something($data) {
5
Taggart Jensen