Get Entity URL from media in TWIG

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()  }) }}

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.