Tengo una pregunta sobre cómo obtener una ruta a una imagen en una plantilla Twig. La imagen no está asignada a un campo o algo. Solo una imagen estática que se almacena en "MYTHEME / image / icon / my-icon.png".
En Drupal 7 obtengo la ruta en mi nodo.template con el siguiente código:
<img src="<?php print base_path() . path_to_theme(); ?>/image/icons">/my-icon.png
¿Cómo funciona en Drupal 8? Traté de pasar una variable en template_preprocess_node()
.
MITO.tema:
$variables['images_path'] = \Drupal::theme()->getActiveTheme()->getPath() . '/image/';
Plantilla de ramita:
<img src="{{ images_path ~ 'icons/' ~ 'my-icon.png' }}">
No funciona No hay error de PHP, pero se dice erróneamente que la ruta es http: //localhost/node/themes/template/image/icons/my-icon.png .
drupal_get_path
es para D7 :)$themePath = Url::fromUserInput('/' . drupal_get_path('theme', '[themename]')
Respuestas:
puede usar
{{ base_path ~ directory }}
lo que solucionará el problema absoluto, no es necesario realizar ningún procesamiento previo, ambas variables están incluidas por core.Por ejemplo
PD. el
~
ayudante en ramita es concatenar.Editar: al menos en la página * .html.twig templates se incluye la variable base_path, posiblemente deba realizar un preprocesamiento para otras plantillas, puede verificar fácilmente
{{ dump() }}
si las variables están presentesfuente
{{ directory }}
variable Twig en un tema que piensa usar como tema base y cree subtemas para: drupal.stackexchange.com/questions/277278{{ base_bath }}
a cada plantilla; de lo contrario, para algunas plantillas, tendrá que hacer lo que hizo Marcos Buarque en el comentario anterior, o Matoeil lo hizo en drupal.stackexchange.com/a/238535/4195Por defecto, hay una
{{ directory }}
variable que puede usar que apunta a su directorio de temas. El problema es que no es absoluto, como el que agregaste. Creo que es un error en el núcleo porque debería incluir la ruta base, pero cambiar eso, por supuesto, rompería los sitios existentes que lo usan.Por lo tanto, debe agregar un / delante de él; esto se rompería si Drupal está instalado en una subcarpeta. Puede codificar eso en su plantilla o seguir usándolo
base_path()
como lo hizo en 7.x en una variable personalizada.fuente
/sites/default/files/MyFolder
? Tengo una imagen MyImage.jpg en MyFolder. Ahora, en la plantilla de ramita si escribí<img src={{ url }} alt={{ text }}>
Aquí, la variable url tiene la ruta /MyFolder/MyImage.jpg pero no funciona.<img src="/{{ directory }}/path/to/image"/>
para obtener un camino absoluto.trabajó para mí cuando
No
para la plantilla de contenido, tuve que usar en .module
y
fuente