El nuevo sistema de plantillas de Drupal 8

Por MaxMendez -- 18 de Septiembre 2013

Drupal 8 trae consigo un sin número de cambios de paradigma y el sistema de plantillas no es la excepción, la versión 7 de Drupal, dejo en evidencia un gran problema. Quedo al descubierto un gran desorden, por una parte heredado y por otra por la respuesta que se le dio a viejos problemas que se tenía en versiones anteriores.

Para resolver muchos de estos problemas, se tomo la decisión de implementar el motor y lenguaje de plantillas llamado Twig, el cual fue creado por Fabien Potencier, el mismo autor de Symfony, entre las principales características de este motor de plantillas se encuentra que es rápido, flexible y extendible. Twig está inspirado en los sistema de planillas de python y ruby, por lo cual tiene la característica de permitir la creación de plantillas complejas sin necesidad de tener conocimientos de php y además de ser muy limpias y claras.

Drupal con la implementación de Twig logra una separación más clara entre la lógica de negocio y el despliegue de información, facilitando también la escritura de las plantillas por parte de personas no familiarizadas con Drupal, permitiendo la estandarización de conocimientos y uso de estos. Además de esto ha significado para Drupal como proyecto una simplificación en la pila de despliegue y la desaparición de funciones y procesos.

Etiquetas de Twig

{# ... #} = Para comentarios
{{ ... }} = Para imprimir variables
{% ... %} = Para agregar lógica a la plantilla

¿Qué hace Twig cuando se imprime una variable?

Si indicáramos a Twig la expresión {{user.name}}, buscará el valor de la variable en el siguiente orden:

  1. $user['name']
  2. $user->name
  3. $user->name()
  4. $user->getName()
  5. $user->isName()
  6. null

Utilizando filtros de Twig

Twig cuenta con un buen numero de filtros que se pueden utilizar para aplicar cuando vamos a imprimir un valor, entre los filtros más utilizados se encuentra raw, lower, capatilize, trim, length y join, pero existe muchos más, además que podemos crear nuestros propios filtros extendiendo así las capacidades de Twig, un ejemplo de esto es el filtro "l" y "t", que trae consigo Drupal 8. A continuación como aplicar un filtro:

{{ user.name | upper }}  

Aplicando varios filtros a una variable:

{{ user.name | lower | capitalize }}  

Imprimiendo un texto traducible por Drupal:

{{ 'More information about text formats' | t }}  

Filtro resumido para eliminar espacios en blanco

{{- node.description }} = ltrim($node.description)

{{ node.description -}} = rtrim($node.description)

{{- node.description -}} = trim($node.description)

Estructura de control If

{% if title %}
    <h1>{{title}}</h1>
{%  else %}
    <h1>{{site_name}}</h1>
{% endif %}

Estructura de control For

{% for user in users %}     
  ...
{% endfor %}

Estructura de control For Else

{% for user in users %}
    ...
{% else %}
    No hay usuarios
{% endfor %}

Conclusiones

La implementación de Twig es un gran avance para Drupal, disminuyendo la curva de aprendizaje para los programadores y los encargados del Frontend, la sintaxis limpia y ordenada permitirá un fácil mantenimiento a los proyectos y disminuirá los tiempos de estas tareas. Drupal con este paso deja de ser una isla a formar parte de un continente de proyectos los cuales tienen en común el motor de templates, facilitando la entrada a colaborar en el proyecto, a especialistas de otros proyectos que implemente Twig.