Comprendere gli hook
Gli hook sono uno dei modi in cui i moduli interagiscono con i moduli aggiuntivi o con i sottosistemi del core di Drupal. Gli hook vengono utilizzati per vari compiti, tra cui variabili di preprocessamento per i file di template (hook_preprocess()
), modifica di elenchi di informazioni (hook_tokens_alter()
, hook_views_data_alter()
) e manipolazione dei form (hook_form_alter()
), tra le altre cose. In questa pagina sono elencati tutti gli hook forniti dal core.
I moduli possono definire i propri hook aggiuntivi. Ad esempio, il modulo Flag definisce hook_flag_options_alter()
, che può essere usato da moduli che vogliono modificare le opzioni di un flag esistente predefinito. La maggior parte dei moduli che definiscono hook forniscono anche documentazione a riguardo. Questa documentazione si trova nel file *.api.php
.
Gli hook vengono eseguiti in diversi punti del flusso di esecuzione, dove Drupal cerca contributi da tutti i moduli abilitati. Ad esempio, quando un utente visita la pagina di aiuto su un sito Drupal, mentre Drupal genera la pagina di aiuto, offre a ciascun modulo la possibilità di fornire documentazione su sé stesso. Questo avviene scansionando tutti i moduli abilitati alla ricerca di implementazioni di hook_help()
. Vale a dire funzioni con il nome mymodule_help($route_name, \Drupal\Core\Routing\RouteMatchInterface $route_match)
, dove “mymodule” è il nome del modulo. Ad esempio, l’hook di aiuto del modulo block si chiama block_help()
, mentre quello del modulo node si chiama node_help()
. Un hook può fornire parametri; i parametri di hook_help
$route_name
e $route_match
permettono allo sviluppatore di determinare in quale pagina o pagine verranno visualizzati i messaggi di aiuto.
Un hook può essere visto come un listener di eventi, nel senso che un evento innesca un’azione. Un evento in Drupal, come l’eliminazione di un nodo, attiverà l’hook hook_node_delete
. Se nel tuo modulo è implementato hook_node_delete
, questa funzione verrà eseguita alla cancellazione di un nodo. Ad esempio, la tua funzione potrebbe consistere nel decrementare il conteggio totale dei nodi, quindi quando un nodo viene eliminato la tua funzione viene richiamata e il conteggio diminuisce di 1.
Vedi anche la panoramica degli hook dei moduli nella Guida all’API di Drupal. Potresti anche voler consultare questo ottimo articolo che spiega come funziona il sistema di moduli/hook di Drupal, utilizzando semplici costrutti/fragmenti PHP.