Quiero representar una imagen como imagen de fondo a través de un estilo en línea en twig. Creé un campo llamado bg_image y lo adjunté a la página normal estándar.
Después de jugar durante horas, pude obtener la URL de la imagen en node.html.twig
{{ file_url(node.field_bg_image.0.entity.uri.value) }}
pero no pude hacerlo funcionar dentro del campo - field-bg_image.html.twig
¿Puedo obtener el nodo desde allí de todos modos, para poder obtener la imagen?
¿Cómo puedo obtener la URL de la imagen para usarla como estilo en línea? Pensé que tal vez podría pasar una variable de campo - field-bg_image.html.twig a image.html.twig y luego simplemente renderizar
{{ uri }}
en lugar de
<img{{ attributes.addClass(classes) }} />
pero no pude hacer que pasara la variable allí a menos que use incluye
{% include 'image.html.twig' with {'image': image, 'isFromField': isFromField} %}
(isFromField es verdadero, cuando viene del campo - field-bg_image.html.twig) Pero eso tampoco funcionó. La imagen nunca fue renderizada de esa manera.
Estaría muy contento si puede ayudar, mi conocimiento de php es muy básico. Gracias
Respuestas:
La variable
node
solo está precargada en la plantilla de nodo (y la plantilla de página, si la url contiene el nodo). Ahora, si desea acceder a los campos de nodo en una plantilla de campo, debe buscar en un lugar diferente:field.html.twig:
element['#object']
es la entidad principal en una plantilla de campo y puede acceder a cualquier campo desde esta entidad (en su caso, el nodo).Si desea acceder a valores sin procesar desde el campo real, es mejor seguir la lógica de la ramita de campo y acceder al valor dentro del bucle de elementos directamente desde el objeto de elemento de campo
#item
:Editar: obtener la URL de un estilo de imagen
Instale el módulo Twig Tweak y puede usar la uri para obtener la url de un estilo de imagen:
fuente
Solo para mencionar que si desea hacer lo mismo en uno de los nuevos bloques personalizados, esto funciona:
fuente
Yo uso este código en mi archivo .theme:
Se podría mejorar. Estoy buscando el campo de imagen y cargando su url con un estilo de imagen.
Luego, en mi nodo - archivo page.html.twig tengo esto:
Nuevamente, eso podría mejorar. Gracias
fuente
Lo haría de otra manera. En su función de preproceso de nodo:
Luego, en su plantilla (nodo - NODETYPE.html.twig), simplemente renderice la imagen de esa manera:
Sin embargo, si alguna vez tiene que renderizar una gran cantidad de imágenes, le aconsejo que cargue los estilos en una matriz antes de hacer un bucle en cada imagen. Digo que debido a que me he encontrado con serios problemas de tiempo de carga porque tuve que cargar más de 300 imágenes y para cada imagen, estaba cargando el estilo individualmente en lugar de cargarlas todas antes, aquí hay un ejemplo, la misma base que arriba:
Por otra parte, en su plantilla (nodo - NODETYPE.html.twig), simplemente renderice las imágenes de esa manera:
Realmente no lo he probado y me estoy sacando todo esto de la cabeza, por lo que podría contener errores, no dudes en advertirme, así que corregiré esto :-).
fuente
He tenido éxito al usar el Módulo de imagen de fondo cuando el caso de uso lo permite. Uso una de estas opciones de código cuando necesito una estructura DOM personalizada.
fuente