Come faccio a creare e utilizzare un hook personalizzato?


10

Ho pubblicato una domanda qui , che aveva un suggerimento, ma nessuna risposta. Qualcuno ha qualche consiglio su come implementare un hook personalizzato in Drupal 8 che consentirà ad altri moduli di aggiornare un sommario creato da un modulo genitore? Il sommario sarà un elenco non ordinato.


2
Dai un'occhiata alla sezione "Per definire un hook:" qui , ti aiuta?
Clive

Solo parzialmente. Questo spiega come creare un hook da utilizzare per la funzione figlio, ma nulla su come il modulo genitore rende il contenuto. Il genitore usa un controller per aggiungere contenuto, per esempio, $ output ['table_of_contents'] e quindi il hook del genitore accoda i dati che vengono restituiti dal figlio, a questo array?
Kevin Nowaczyk,

2
@KevinNowaczyk dipende dallo scopo del gancio. Un hook non è specifico per il rendering, ma può essere utilizzato per esso. Se si desidera creare un hook personalizzato per fornire contenuto e si richiama il hook nel punto in cui è necessario il contenuto, funzionerà. E poiché l'hook è personalizzato e nuovo per la tua funzione, devi definire come l'hook dovrebbe fornire i suoi risultati. Quindi, se si richiama l'hook durante la funzione di rendering principale, è possibile ricevere i risultati in un formato utilizzabile.
Neograph734

Risposte:


8

Questa sezione si trova in un controller nel modulo padre:

$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 questo risiede nel file figlio [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);
}

Il genitore crea un array e lo passa ai figli per riferimento. Possono modificare l'array aggiungendo elementi ad esso. Il genitore quindi lo aggiunge all'array di rendering.


5

Per semplicità, se vuoi creare e usare un hook personalizzato in drupal 8 che altri sviluppatori possano usare

in primo luogo per aiutare gli altri a definire l'uso del tuo hook nel file mymodule.api.php, questo hook può agire su tutto ciò che è richiesto.

esempio:

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

quindi quando necessario nel modulo.

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

quindi l'altro sviluppatore può fare uso di questo chiamando

function MYOTHERMODULE_mymodule_alter_something($data) {
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.