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

Confronto tra le paradigmi PHPTemplate e Twig

03/10/2025, by Ivan

Menu

Informazioni su Twig

Twig è un linguaggio di template compilato basato su PHP. Quando la tua pagina web viene renderizzata, il motore Twig prende il template e lo trasforma in un template PHP “compilato”, che viene memorizzato in una cartella protetta in sites/default/files/php/twig. La compilazione avviene una sola volta, i file dei template vengono messi in cache per il riutilizzo e ricompilati quando la cache Twig viene svuotata.

L’iniziativa Drupal Twig ha la stessa motivazione dell’iniziativa Symfony: introdurre un motore moderno, potente e orientato agli oggetti, che permetta agli sviluppatori di concentrarsi correttamente su Drupal.

1. Docblock

PHPTemplate:

<?php 
/** 
 * @file
 * Descrizione del file
 */
?>

Twig:

{# 
/** 
 * @file
 * Descrizione del file
 */
#}

2. Nomi di file e funzioni

File PHPTemplate: node--article.tpl.php
File Twig: node--article.html.twig

Funzione PHPTemplate: THEME_node_links()
File Twig: node-links.html.twig

3. Variabili

Stampare una variabile:

PHPTemplate: <div class="content"><?php print $content; ?></div>
Twig: <div class="content">{{ content }}</div>

Stampare un elemento di una chiave hash [1]

PHPTemplate: <?php print $item['#item']['alt']; ?>
Twig: {{ item['#item'].alt }}

Assegnare una variabile:

PHPTemplate: <?php $custom_var = $content->comments; ?>
Twig: {% set custom_var = content.comments %}

Assegnare un array:

PHPTemplate: <?php $args = array('@author' => $author, '@date' => $created); ?>
Twig: {% set args = {'@author': author, '@date': created} %}

4. Condizioni

PHPTemplate: <?php if ($content->comments): endif; ?>
Twig: {% if content.comments %} {% endif %}

PHPTemplate: <?php if (!empty($content->comments)): endif; ?>
Twig: {% if content.comments is not empty %} {% endif %}

PHPTemplate: <?php if (isset($content->comments)): endif; ?>
Twig: {% if content.comments is defined %} {% endif %}

PHPTemplate: <?php if ($count > 0): endif; ?>
Twig: {% if count > 0 %} {% endif %}

5. Strutture di controllo

PHPTemplate: <?php foreach ($users as $user) {} ?>
Twig: {% for user in users %} {% endfor %}

6. Filtri

Escape dei caratteri speciali HTML:

PHPTemplate: <?php print check_plain($title); ?>
Twig [2]: {{ title }}

Valori non trattati:

PHPTemplate: <?php print $title; ?>
Twig: {{ title|raw }}

Traduzione:

PHPTemplate: <?php print t('Home'); ?>
Twig: {{ 'Home'|t }}

Traduzione con sostituzioni:

PHPTemplate: <?php print t('Welcome, @username', array('@username' => $user->name)); ?>
Twig: {{ 'Welcome, @username'|t({ '@username': user.name }) }}

Drupal 8 Twig (con estensione trans tag):

{% set username = user.name %}
{% trans %}
  Welcome, {{ username }}
{% endtrans %}

Unire una lista:

PHPTemplate: <?php echo implode(',', $usernames); ?>
Twig: {{ usernames|join(', ') }}

Unire una lista con markup:

Twig: {{ usernames|safe_join(',') }}

L’esempio PHPTemplate richiede che $usernames sia un array di stringhe. Lo stesso vale per l’esempio Twig originale, dove “usernames” è un array di stringhe. D’altra parte, l’esempio Twig di Drupal 8 richiede un array di oggetti renderizzabili. Questa è in realtà una differenza fondamentale tra Twig in Drupal 8 e Twig originale. Drupal 8 Twig “stampa” sia testo semplice che array renderizzabili.

Un altro aspetto di questo esempio è che ci si aspetterebbe che tutti e tre gli esempi producano lo stesso output, ma non è così (di default). Considera questo esempio:

{% set numbers = [{'#markup': 'One'}, {'#markup':'Two'}, {'#markup':'Three'}] %}
{{ numbers }}

Quanto sopra suggerisce che gli elementi vengano stampati separati da virgole. Ma l’output è: OneTwoThree

7. Gestione degli spazi

Twig permette di controllare gli spazi, consentendo di rimuovere quelli usati per la strutturazione del file del template.

<div class="body">
  {{- block.content -}}
</div>

Questo è equivalente a:

<div class="body">{{ block.content }}</div>

Attenzione

  • L’esempio della chiave hash potrebbe cambiare in futuro
  • Nel secondo esempio mostriamo come Twig gestisce la sanitizzazione dei dati. In precedenza, questo veniva gestito nel file del template o nella funzione di preprocess. Questo cambiamento è molto importante per chi spera di portare un tema PHPTemplate su Drupal 8 – dovrai pulire manualmente i tuoi dati. ↩︎︎

Per ulteriori informazioni, consulta: