Tengo un campo de imagen en mi tipo de contenido (field_hero_image).
No quiero que se procese en el archivo node.html.twig. Sin embargo, quiero renderizarlo en el archivo page.html.twig. Específicamente, quiero representarlo junto al título de la página.
¿Qué código usaría en mi archivo page.html.twig para acceder a los campos de nivel de nodo y representarlos?
(Hay una pregunta similar publicada, pero no pude usar la respuesta provista allí para resolver mi problema).
Esto para Drupal 8 tematización.
Respuestas:
Después de investigar un poco más, pude encontrar suficientes piezas en otras preguntas y en drupal.org para lograr lo que quería hacer.
No se necesita preprocesamiento para esta respuesta, por lo que no es necesario agregar código a su archivo mytheme.theme.
Todas estas variables ya están accesibles en page.html.twig por defecto.
Para representar el valor predeterminado de un campo dentro de page.html.twig, normalmente usaría una variable Twig como en
{{ node.field_some_name.value }}
.Si tiene un campo de imagen y desea representar la URL de la imagen almacenada en ese campo dentro de la plantilla page.html.twig, debería utilizarla
{{ file_url(node.field_some_image.entity.fileuri) }}
.Finalmente, si desea representar el título de un nodo dentro de la plantilla page.html.twig, lo usaría
{{ node.label }}
.También aprendí a usar algunos condicionales Twig para mi problema particular, pero eso está más allá del alcance de esta pregunta / respuesta.
fuente
file_url()
en los documentos ( drupal.org/docs/8/theming/twig/functions-in-twig-templates ) hace exactamente esto, así que votó positivamente.page.html.twig
?Hay tres métodos útiles para trabajar con esto, todos los cuales le ahorran tiempo de excavación en matrices de renderizado complicadas.
Con Display Suite (con el submódulo ds_extras) puede asignar a la región del héroe un bloque ("región de bloque") que es un modo de visualización diferente (es decir, solo uno que contiene la imagen del héroe). De este modo, se muestran dos modos de visualización diferentes a la vez. Tenga en cuenta que algunos ganchos de preproceso pueden no dispararse como podría esperar si hace esto.
El módulo twig_tweak simplifica enormemente tales tareas y puede proporcionar declaraciones de ramita más fáciles para los valores de campo. Eche un vistazo a la hoja de trucos para algunos usos comunes:
{{ drupal_field('field_image', 'node', 1) }}
La firma de la función es:drupalField($field_name, $entity_type, $id = NULL, $view_mode = 'default', $langcode = NULL)
El módulo twig_field_value hace declaraciones de ramita más simples. Por README.txt:
<img src={{ file_url(content.field_image|field_target_entity.uri.value) }} alt={{ content.field_image|field_raw('alt') }} />
Si hubiera sabido esto antes, ¡me habría ahorrado mucho tiempo!
fuente
{{ node.field_some_name.value }}
no representa el campo. No invoca el sistema de temas completo (función de preproceso, plantilla, etc.). OTOH, si usa eltwig_tweak
módulo, puede obtener el campo completo con{{ node.field_some_name|view }}