6.4. Twig es el nuevo motor de plantillas para Drupal.
Si abres el archivo de plantilla page.html.twig del tema Stable:
/core/themes/stable/templates/layout/page.html.twig
Ver谩s que difiere del template page.tpl.php de Drupal 7, primero por la extensi贸n y segundo por la abundancia de llaves dobles {}. Todo esto se debe a que Drupal usa el motor de plantillas Twig.
<main role="main">
<a id="main-content" tabindex="-1"></a>{# el enlace est谩 en html.html.twig #}
<div class="layout-content">
{{ page.content }}
</div>{# /.layout-content #}
{% if page.sidebar_first %}
<aside class="layout-sidebar-first" role="complementary">
{{ page.sidebar_first }}
</aside>
{% endif %}
{% if page.sidebar_second %}
<aside class="layout-sidebar-second" role="complementary">
{{ page.sidebar_second }}
</aside>
{% endif %}
</main>
No se puede usar PHP en la plantilla Twig, as铆 que solo debes usar herramientas de Twig, las cuales son suficientes para maquetar el sitio.
Veamos c贸mo trabajar con Twig.
Variables en Twig
Si en PHP usamos el s铆mbolo de d贸lar $ para variables, en Twig usamos llaves dobles:
{{ variable }}
As铆 escribimos variables: dos llaves de apertura, espacio, nombre de la variable, espacio, dos llaves de cierre. No necesitas usar la funci贸n print ni ning煤n c贸digo PHP, solo las llaves dobles.
Tambi茅n es c贸modo trabajar con objetos y arrays de variables. En lugar de saber si $node es un objeto o $form un array, usamos punto para acceder a propiedades:
{{ node.id }}
Podemos declarar variables f谩cilmente:
{% set foo = "bar" %}
Hola, esta es mi variable: {{ foo }}
Nota la sintaxis: para definir usamos llaves con %, para mostrar usamos llaves dobles.
Tambi茅n podemos definir arrays:
{%
set foo_array = [
'foo',
'bar',
]
%}
Filtros en Twig
Aunque Twig no es un lenguaje de programaci贸n completo, tiene herramientas para trabajar con datos. La m谩s importante son los filtros, que se indican con el s铆mbolo pipe |
{{ variable | filtro }}
Ejemplos:
{{ node.title | length }} - imprime la longitud de una cadena
{{ node.title | upper }} - muestra la cadena en may煤sculas
{{ node.title | lower }} - muestra la cadena en min煤sculas
Consulta la lista completa de filtros en la documentaci贸n oficial: http://twig.sensiolabs.org/doc/filters/index.html
Filtros Twig en Drupal
Drupal a帽ade filtros adicionales como:
- t
- passthrough
- placeholder
- drupal_escape
- safe_json
- without
- clean_class
- clean_id
Traducci贸n de l铆neas en Twig
Para traducir texto, usa la etiqueta {% trans %}:
{% trans %} Hola mundo {% endtrans %}
Tambi茅n puedes insertar variables en la traducci贸n:
{% trans %} Hola {{ name }} {% endtrans %}
O aplicar filtros antes de mostrar:
{% set name = name | capitalize %}
{% trans %}
Hola {{ name }}!
{% endtrans %}
Comentarios en Twig
{# Comentario aqu铆 #}
Condicionales If
Puedes verificar si una variable existe:
{% if site_slogan %}
<div class="site-slogan">{{ site_slogan }}</div>
{% endif %}
Bucle for en Twig
Para recorrer un array, usamos for:
{% for item in items %}
{{ item.content }}
{% endfor %}
Tambi茅n puedes hacer un for sobre un rango:
{% for i in range(0, 3) %}
{{ i }},
{% endfor %}
| Variable | Descripci贸n |
|---|---|
| items.index | N煤mero del elemento actual empezando desde 1 |
| items.index0 | N煤mero del elemento actual empezando desde 0 |
| items.revindex | N煤mero del elemento desde el final, empezando desde 1 |
| items.revindex0 | N煤mero del elemento desde el final, empezando desde 0 |
| items.first | TRUE si es el primer elemento |
| items.last | TRUE si es el 煤ltimo elemento |
| items.length | Longitud del array |
| items.parent | Contexto padre |
Uso de for else
<ul>
{% for user in users %}
<li>{{ user.username|e }}</li>
{% else %}
<li><em>no se encontr贸 ning煤n usuario</em></li>
{% endfor %}
</ul>