web-dev-qa-db-fra.com

Comment obtenir la valeur du champ brut dans un modèle twig?

myfield est un champ de texte brut. {{ content.field_myfield }} rend le champ avec le balisage HTML et l'étiquette de champ.

Comment rendre la valeur brute du champ? {{ content.field_myfield.value }} ne fonctionne pas.

28
Pim

{{ entity.field_name.value }} pour obtenir la vraie valeur brute, inclut les balises et l'encodage.

  • Exemple: {{ node.body.value }}
  • résultat: <p>Batman &amp; Robin</p>

{{ content.field_name.0 }} pour obtenir la valeur brute moins les balises et l'encodage.

  • Exemple: {{ content.body.0 }}
  • résultat: Batman & Robin

brut

Ce filtre doit être évité autant que possible, en particulier si vous générez des données qui pourraient être saisies par l'utilisateur. Voir cette page pour plus d'informations sur l'échappement automatique dans Drupal 8.

source: Filtres - Modification des variables dans Twig Templates

Le filtre brut marque la valeur comme "sûre", ce qui signifie que dans un environnement avec l'échappement automatique activé, cette variable ne sera pas échappée si raw est le dernier filtre appliqué

source: documents officiels de Twig




Par exemple, vous pouvez utiliser:

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

Le problème avec l'utilisation de twig ( | striptags est le double encodage des entités html, pas le balisage, donc & devient &amp; et alors &amp;amp; - Berdir

47
No Sssweat

Vous pouvez utiliser le module Twig Field Value dans ce cas. Après avoir installé ce module, vous aurez accès à des données partielles à partir de tableaux de rendu de champ. Par exemple.

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

etc. Plus d'infos sur la page des projets

5
Andrew Kozoriz
{{ content.body | raw }} 

obtenir la valeur du champ brut dans un modèle twig

2
Wasim Khan

Dans le cas où cela aiderait quelqu'un, je voulais seulement afficher l'année de début d'un champ de plage de date et heure, au lieu des deux parties de la plage, dans un champ Twig template.

J'ai donc fini par remplacer le modèle de champ habituel par ceci:

{% if label_hidden %}
  {% if multiple %}
    <div{{ attributes.addClass(classes, 'field--items') }}>
      {% for key, item in items %}
        <h3{{ item.attributes.addClass('field--item') }}>{{ element['#items'][key].value|date('Y') }}</h3>
      {% endfor %}
    </div>
  {% else %}
    {% for key, item in items %}
      <h3{{ attributes.addClass(classes, 'field--item') }}>{{ element['#items'][key].value|date('Y') }}</h3>
    {% endfor %}
  {% endif %}
{% else %}
  <div{{ attributes.addClass(classes) }}>
    <div{{ title_attributes.addClass(title_classes) }}>{{ label }}</div>
    {% if multiple %}
      <div class="field--items">
    {% endif %}
    {% for key, item in items %}
      <h3{{ item.attributes.addClass('field--item') }}>{{ element['#items'][key].value|date('Y') }}</h3>
    {% endfor %}
    {% if multiple %}
      </div>
    {% endif %}
  </div>
{% endif %}
0
Dave Nattriss