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

Preprocessing e modifica degli attributi nel file .theme

02/10/2025, by Ivan

Come in Drupal 7, puoi influenzare l’output di un determinato HTML usando le funzioni di preprocessing. Ad esempio, se vuoi aggiungere una classe a un menu e preferisci farlo a livello di PHP, puoi farlo. Questo è un buon modo per modificare il markup relativo al tema, ma se vuoi creare un markup indipendente dal tema, è meglio scrivere un modulo personalizzato.

(Nota: per scopi di documentazione qui «mytheme» è il nome macchina del tuo tema; ad esempio, «bartik» è il nome macchina del tema.)

Per lavorare con le funzioni di preprocessing:

1. Crea o modifica un file nella cartella del tuo tema chiamato mytheme.theme

2. Crea una funzione come mytheme_preprocess_HOOK, dove HOOK si riferisce all’elemento su cui vuoi intervenire*

3. Scrivi le tue modifiche e salva

4. Ricostruisci la cache per rendere disponibili le tue modifiche (se hai installato drush, usa drush cr da riga di comando)

* I nomi HOOK seguono le convenzioni dei template twig. Per creare un hook per page.html.twig, crei mytheme_preprocess_page. Per creare un hook per un nodo - article.html.twig, crei mytheme_preprocess_node__article (sostituendo i trattini bassi). Per conoscere i nomi degli hook, consulta la sezione «Trovare i file di template con il debugging».

Supponiamo di voler aggiungere la classe my-menu a tutti i menu del tuo sito. Supponendo che il tuo tema si chiami «mytheme», devi scrivere la seguente funzione:

/**
* Implements hook_preprocess_HOOK() for menu.html.twig.
*/
function mytheme_preprocess_menu(&$variables) {
  // Se non esiste già un array di classi, creane uno vuoto.
  if (!isset($variables['attributes']['class'])) {
    $variables['attributes']['class'] = [];
  }
  // Fonde con eventuali classi già impostate da altre invocazioni di hook_preprocess_menu
  $variables['attributes']['class'] = array_merge($variables['attributes']['class'], ['my-menu']);
}

Questo è molto simile a Drupal 7 e utile se vuoi personalizzare un menu specifico.

Puoi controllare l’oggetto $variables con una condizione per determinare con quale menu stai lavorando. Gli elementi dentro $variables diventano disponibili in twig dopo il preprocessing del tema.

Ora, per ampliare il nostro esempio, supponiamo di voler aggiungere la classe «my-main-menu» al menu principale del tuo sito. Ecco la funzione per farlo:

/**
* Implements hook_preprocess_HOOK() for menu.html.twig.
*/
function mytheme_preprocess_menu(&$variables) {
  if ($variables['menu_name'] == 'main') {
    if (!isset($variables['attributes']['class'])) {
      $variables['attributes']['class'] = [];
    }
    $variables['attributes']['class'] = array_merge($variables['attributes']['class'], ['my-main-menu']);
  }
}

Differenze rispetto a Drupal 7

Non esiste più il file template.php. Questo file è stato sostituito da mytheme.theme. Tuttavia, funziona ancora in gran parte nello stesso modo, consentendo agli hook di modificare l’output.

Altri link utili