¿Cómo obtengo el valor de campo sin procesar en una plantilla de ramita?

27

myfield es un campo de texto plano. {{ content.field_myfield }}representa el campo con marcado HTML y la etiqueta del campo.

¿Cómo renderizo el valor bruto del campo? {{ content.field_myfield.value }}no funciona

Pim
fuente

Respuestas:

45

{{ entity.field_name.value }} para obtener el verdadero valor bruto, incluye etiquetas y codificación.

  • Ejemplo: {{ node.body.value }}
  • resultado: <p>Batman &amp; Robin</p>

{{ content.field_name.0 }} para obtener el valor bruto menos etiquetas y codificación.

  • Ejemplo: {{ content.body.0 }}
  • resultado: Batman & Robin

crudo

Este filtro debe evitarse siempre que sea posible, especialmente si está generando datos que podrían ser ingresados ​​por el usuario. Consulte esta página para obtener más información sobre el escape automático en Drupal 8.

fuente: Filtros - Modificación de variables en plantillas de ramita

El filtro sin procesar marca el valor como "seguro", lo que significa que en un entorno con escape automático habilitado, esta variable no se escapará si el filtro sin procesar es el último aplicado.

fuente: documentos oficiales de Twig


Por ejemplo, puedes usar:

{{ node.body.value|striptags }}
{{ paragraph.field_text.value|striptags }}

El problema con el uso de | striptags de twig es la doble codificación de entidades html, no el marcado, por lo que & se convierte en & y luego & amp; - Berdir

No Sssweat
fuente
66
Los ejemplos de contenido no son correctos. Ver drupal.stackexchange.com/questions/198694/… . Lo que puedes usar es content.field_text.0, entonces solo obtienes la parte interna del primer elemento de campo, sin las plantillas de campo. Eso es especialmente útil para listas, referencias, etc., donde desea la salida formateada, no el valor sin procesar
Berdir
2
Mejor, pero aún no del todo correcto. content.field_myfield | striptags no funciona, no puedes pasar una matriz de renderizado a eso. Debería renderizarlo primero y luego pasarlo por eso. striptags, etc., también tienen problemas con & y otros caracteres que pueden codificarse dos veces, por lo que a menudo necesita un | striptags | raw en realidad.
Berdir
2
Just | raw deja las etiquetas html y las imprime. El problema con | striptags es la doble codificación de las entidades html, no el marcado, por lo que & se convierte en & amp; y luego & amp; amp;
Berdir
2
Esto no es doble escape, puede ver eso <y >se muestran correctamente. El ampersand probablemente ya haya escapado antes de que salga. Pero la pregunta es sobre un campo de texto plano , no un campo de texto formateado procesado por filtros de texto. (Para responder a esta pregunta no formulada, el valor .valuesin formato (si alguien realmente quiere eso) aún estaría y Twig lo escaparía de forma correcta por razones de seguridad, ya que nunca debería generar un campo de texto formateado sin filtrar)
4k4
2
Sí, esto es lo que quise decir (escape automático = escape único). Entonces, sus ejemplos para generar valores de campo de entidad son perfectos, solo sin el filtro striptag, porque esto produciría la salida fea de doble escape. (Por cierto, la &amp;salida en su ejemplo es incorrecta, esto no sucede en el autoescaping a menos que el contenido del campo ya haya escapado una vez)
4k4
5

Puede usar el módulo Twig Field Value en este caso. Después de instalar este módulo Obtendrá acceso a datos parciales de las matrices de procesamiento de campo. Por ej.

{{ content.field_name|field_value }}
content.field_image|field_target_entity.uri.value

etc. Más información en la página de proyectos

Andrew Kozoriz
fuente
1
{{ content.body | raw }} 

obtener el valor de campo sin procesar en una plantilla de ramita

Wasim Khan
fuente