logo

Extra Block Types (EBT) - Nuova esperienza con Layout Builder❗

Extra Block Types (EBT) - tipi di blocchi stilizzati e personalizzabili: Slideshows, Tabs, Cards, Accordion e molti altri. Impostazioni integrate per sfondo, DOM Box, plugin javascript. Vivi oggi il futuro della costruzione dei layout.

Demo moduli EBT Scarica moduli EBT

❗Extra Paragraph Types (EPT) - Nuova esperienza con Paragraphs

Extra Paragraph Types (EPT) - insieme di moduli basati su paragrafi in modo analogo.

Demo moduli EPT Scarica moduli EPT

Scorri

9.2. Cosa significa “hook” in Drupal?

17/10/2025, by Ivan

Questo articolo ha lo scopo di familiarizzarti con Drupal; più avanti scriveremo esempi di codice, dopo aver aggiunto il nostro modulo personalizzato.

Drupal non è un sistema monolitico in cui tutto è perfetto e non c’è nulla da modificare. Molto spesso i clienti chiedono di aggiungere una o un’altra funzionalità al sito. Per poter mantenere il codice del core di Drupal e aggiungere nuove funzionalità, utilizziamo i moduli. Il sistema modulare consente di ampliare le capacità di Drupal. Ma cosa succede se abbiamo bisogno di estendere le funzionalità di un modulo già pronto, come un modulo contatore? Certamente, possiamo inviare una richiesta per aggiungere la funzionalità desiderata creando un’“issue” su drupal.org e, forse, dopo un mese, due… o anche un anno, otterremo la funzionalità richiesta in quel modulo specifico. Tuttavia, possiamo agire diversamente e scrivere noi stessi il codice di cui abbiamo bisogno. Per ampliare le capacità dei moduli aggiuntivi di Drupal, così come di Drupal stesso, utilizzeremo hook e plugin nei nostri moduli personalizzati.

L’idea principale è che non abbiamo bisogno di mantenere il codice di Drupal o quello dei moduli aggiuntivi; in questo modo si ottiene un notevole risparmio sui costi del lavoro di programmazione. Per poter aggiornare facilmente il codice dei moduli e di Drupal, non si devono apportare modifiche al core di Drupal o ai moduli contrib. In caso contrario, tutte le modifiche verranno eliminate al successivo aggiornamento del modulo o del core di Drupal.

Per l’interconnessione tra i moduli e il core di Drupal, così come tra i moduli stessi, Drupal dispone di un sistema di hook. Un hook è una richiamata di funzione (callback), ossia, quando l’esecuzione del codice raggiunge l’hook, viene eseguito anche il codice della nostra funzione, che aggiungiamo nel nostro modulo. In questo modo possiamo elaborare i dati degli utenti, i menu, le tassonomie, i nodi di vari tipi di contenuto in qualsiasi momento: durante la modifica, l’aggiunta, la cancellazione o semplicemente durante il caricamento e la visualizzazione. Esistono moltissimi hook in Drupal 8, anche se meno rispetto a Drupal 7, poiché molti hook sono stati implementati tramite componenti esterni di Symfony:

https://api.drupal.org/api/drupal/core%21core.api.php/group/hooks/8.2.x

Se guardi la versione 7, dovrai scorrere a lungo verso il basso:

https://api.drupal.org/api/drupal/includes%21module.inc/group/hooks/7.x

Ma questo non significa che Drupal 8 sia diventato meno potente; semplicemente, tutto ciò che era implementato con un hook in Drupal 7, in Drupal 8 deve essere realizzato tramite il relativo plug-in.

Se osservi attentamente l’elenco degli hook in Drupal 8, noterai che molti terminano con _alter nel loro nome, il che significa che questo hook serve a modificare i valori delle variabili, per esempio:

hook_form_alter() – consente di modificare l’array del form durante la sua elaborazione in Drupal. Più avanti analizzeremo come i form vengono generati a partire dagli array in Drupal. Per applicare questo hook in un modulo, come per gli altri hook, basta scrivere una funzione:

function mymodule_form_alter() {
  // modifica l’array del form
}


Ho semplificato l’esempio, non ho scritto gli argomenti della funzione né i namespace; per ora ci basta capire come funzionano gli hook. mymodule è il nostro modulo; scriviamo il nome del nostro modulo al posto della parola hook e la funzione verrà automaticamente richiamata per modificare gli array del form. Come funziona? Nel metodo prepareForm viene chiamato un altro metodo, alter():

$this->moduleHandler->alter($hooks, $form, $form_state, $form_id);

Ciò significa che ogni modulo in Drupal che implementa hook_form_alter() inserisce il proprio codice in questo punto. Quindi, se vogliamo aggiungere del codice in una certa parte di Drupal, la prima cosa da fare è usare un hook; in secondo luogo, un plug-in; e solo se non è assolutamente possibile evitare di modificare il modulo stesso, allora procederemo con una patch o una modifica diretta (purtroppo, talvolta è necessario farlo). Per ora, non ci troveremo di fronte a compiti che richiedono la modifica dei plug-in, quindi impariamo come scrivere i nostri moduli personalizzati.