logo

Extra Block Types (EBT) - Nueva experiencia con Layout Builder❗

Extra Block Types (EBT): tipos de bloques con estilo y personalizables: Presentaciones de diapositivas, Pestañas, Tarjetas, Acordeones y muchos más. Configuraciones integradas para fondo, DOM Box y plugins de JavaScript. Experimenta hoy el futuro de la construcción de diseños.

Módulos de demostración EBT Descargar módulos EBT

❗Extra Paragraph Types (EPT) - Nueva experiencia con Paragraphs

Extra Paragraph Types (EPT): conjunto de módulos basado en párrafos de forma análoga.

Módulos de demostración EPT Descargar módulos EPT

Scroll

Comparación de los paradigmas PHPTemplate y Twig

19/06/2025, by Ivan

Menu

Sobre Twig

Twig es un lenguaje de plantillas compilado basado en PHP. Cuando se muestra tu página web, el motor Twig toma la plantilla y la convierte en una plantilla PHP “compilada”, que se guarda en un directorio protegido en sites/default/files/php/twig. La compilación se realiza una vez, los archivos de plantilla se almacenan en caché para reutilización y se recompilan al limpiar la caché de Twig.

La iniciativa Drupal Twig tiene la misma motivación que la iniciativa Symfony: implementar un motor moderno, potente y basado en OOP que permita a los desarrolladores centrarse correctamente en Drupal.

1. Docblock

PHPTemplate:

<?php 
/** 
 * @file
 * Descripción del archivo
 */
?>

Twig:

{# 
/** 
 * @file
 * Descripción del archivo
 */
#}

2. Nombres de archivos y funciones

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

Función PHPTemplate: THEME_node_links()
Archivo Twig: node-links.html.twig

3. Variables

Imprimir variable:

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

Imprimir elemento de clave hash [1]

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

Asignar variable:

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

Asignar array:

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

4. Condicionales

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. Estructuras de control

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

6. Filtros

Caracteres especiales HTML escapados:

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

Valores sin procesar:

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

Traducción:

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

Traducción con sustituciones:

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

Drupal 8 Twig (con la extensión del tag trans):

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

Unir lista:

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

Unir lista con marcado:

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

El ejemplo PHPTemplate requiere que $usernames sea un array de cadenas. Lo mismo para el ejemplo Twig original, donde "usernames" es un array de cadenas. Por otro lado, el ejemplo Drupal 8 Twig requiere un array de objetos renderizables. Esta es una diferencia fundamental entre Drupal 8 Twig y Twig original. Drupal 8 Twig "imprime" tanto texto simple como arrays renderizables.

Otro aspecto de este ejemplo es que se espera que los tres ejemplos produzcan la misma salida, pero no es así (por defecto). Considera este ejemplo:

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

Lo anterior supone que los elementos se imprimen separados por comas. Pero la salida es: OneTwoThree

7. Control de espacios

Twig tiene control de espacios que permite eliminar los espacios usados para estructurar el archivo de plantilla.

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

Esto es igual a:

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

Advertencia

Para más información, consulta:

Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.