Twig: Enllaços amb HTML i variables

Una de les principals novetats del Drupal 8 és el motor de plantilles Twig, ja que la seva forma de treballar és molt diferent de com ho feiem fins ara amb el Drupal 7.

En un primer moment, hom va a la documentació de Twig i allà està tot -o gairebé tot-, per començar a treballar. Però com sabem, és en el dia a dia on ens trobem amb els problemes reals que hem de solucionar.

En aquest cas, la qüestió és com afegir un enllaç a una plantilla Twig mitjançant la funió link($text, $url, $attributes) que ens ofereix el nucli del Drupal. Com s'intueix només al veure-ho, necessita el text de l'enllaç i l'url, que pot ser un objecte de tipus Url o, simplement, una cadena de text amb l'adreça. Amb el Twig podem utilitzar objectes que es poden convertir màgicament en cadenes de text mitjançant toString().

I què succeeix si necessitem que el text contingui HTML? I HTML amb una variable? La resposta és que no podem afegir directament el codi a la crida de la funció. Per fer-ho haurem de definir una variable que contingui el codi que vulguem que aparegui dins de l'enllaç. Per exemple així:

 

{% set text %}
 <img src="/{{ directory }}/images/{{ icon }}.svg" alt="Alternative text">
{{ title }} <span class="caret"></span>
{% endset %}
{{ link(text, url, {'class': ['class__link']}) }}

 

És interessant destacar que en aquesta funció podem escriure directament com a valor per a l'url una adreça del Drupal. Per exemple:

 

{{ link(text, 'internal:/user/login', {'class': ['class__link']}) }}

 

Per fer-ho s'han d'utilitzar les claus "internal:" o "base:", que són part de l'esquema de l'objecte Url. La primera la utilitzarem per a camins que corresponen a rutes del Drupal, i la segona, s'hauria d'utilitzar per a direccions que no necessiten el sistema de rutes, com fitxers estàtics.

Per altra banda, si el que volem és que l'enllaç ens porti a la portada, utilitzarem només "base:", ja que representa el Drupal base path i si necessitem l'adreça de la pàgina en la qual estem, "internal:".

Sense arribar a reinventar la roda, no oblidem que també podem fabricar les nostres pròpies funcions per treballar amb el Twig (Un exemple de funció i filtre).

Com gairebé tot al Drupal, dominar-ho sense problemes porta el seu temps. Però Twig és una de les grans millores de la versió 8 i, a mesura que l'anem coneixent, comprovarem que ha estat una bona elecció.