Con este título tan anglosajón quiero hacer este post que tantos quebraderos de cabeza me está generando y es el uso y desglose del motor de plantillas (TWIG) en Drupal.
Ya haré un post, o mejor, un video sobre el uso de TWIG, pero quiero dejar registrado cómo obtener las URL para distintos recursos (entidades) en Drupal.
Imagen
Una de las maneras de obtener la URL de una entidad de tipo imagen es a través del preprocesamiento de la plantilla que se implementa en el fichero MyTheme.theme. Este es un ejemplo:
function mytheme_preprocess_node(&$variables) {
/** @var \Drupal\node\NodeInterface $node */
$node = $variables['node'];
$image_field = $node->get('field_background_image');
if (!$image_field->isEmpty()) {
$uri = $image_field->entity->get('field_media_image')->entity->uri->value;
$variables['background_image_url'] = file_create_url($uri);
}
}
Luego en la plantilla, fichero .html.twig, usaremos lo siguiente:
{{ background_image_url }}
Pero qué ocurre, ¿no estábamos hablando de ficheros TWIG? Cierto. Para obtener, directamente, la URL utilizaremos esto en el fichero de la plantilla en cuestión:
{% if node.field_background_image is not empty %}
{{ file_url(node.field_background_image.entity.field_media_image.entity.fileuri) }}
{% endif %}
Enlace
Otra de las cosas que me ha ocurrido es cómo obtener la URL de un enlace. Este, en realidad, es un nodo y este dato no viene como atributo a la variable que lo referencia. Lo que sí viene es su ID y, por tanto, lo que se hace es construir la forma canónica del mismo. ¿Cómo? pues tal que así:
{{ path('entity.node.canonical', {'node': content['#node'].id() }) }}