Comment rendre le module de paragraphes dans une brindille

8

Je crée un modèle personnalisé pour mon thème et je crée une page page.html.twig. Je veux appeler des champs de nœuds individuels dans des lignes distinctes. J'ai pu tout afficher avec succès, sauf le champ de paragraphe.

J'ai essayé.

{{ node.field_benefits }}
{{ node.field_benefits.value }}
{{ paragraph.field_benefits }}
{{ paragraph.field_benefits.value }}
{{ node.paragraphs.field_benefits }}

Et rien n'a fonctionné. Quelqu'un a-t-il une idée de la structure correcte à appeler dans le module de paragraphe?

Ou est-ce qu'une fonction fonctionnerait

{% if node.field_benefits %}
{% for field_items in node.field_benefits %}
{{ field_item.value }}
{% endfor %}
{% endif %}
Megan McGowan
la source
page.html.twig ne gère pas les nœuds ... uniquement le modèle de page global. Vous utilisez le mauvais modèle. Je vous suggère de remplacer le modèle de nœud à la place (ou au moins de lire la façon dont les modèles de brindilles sont accessibles). En outre, activer le débogage de twig et regarder le code source vous aidera à déterminer le modèle que vous devez remplacer.
NikLP
Ok @NikLP J'ai tout déplacé au niveau du nœud, mais je ne parviens toujours pas à rendre le module des paragraphes - J'utilise le champ que j'ai obtenu du débogage et du kint et il montre toujours une ligne vide
Megan McGowan
Peut-être vérifier cela? drupal.org/node/2444893
NikLP

Réponses:

7

Ajoutez d'abord un paragraph--your_paragraph_machine_name.html.twigdans le répertoire des modèles de votre thème.

Vous pouvez accéder à vos champs de paragraphe en ajoutant des variables de brindille dans un format similaire à {{ content.field_your_field }}.

Si vous ne voulez que la valeur du champ, c'est un peu plus compliqué. Par exemple, si vous aviez un champ Liste (texte) et que vous vouliez obtenir la valeur de l'option sélectionnée, vous pourriez faire quelque chose comme:

{% for item in content.field_select_list %}
  {% if item is iterable %}
    {% for key,value in item %}
      {% if not value is iterable %}
        {% if key == '#markup' %}
          {{ value }}
        {% endif %}
      {% endif %}
    {% endfor %}
  {% endif %}
{% endfor %}

Vous pouvez toujours exécuter un {{ dump(content) }}pour voir la structure et obtenir les valeurs que vous recherchez. J'espère que cela t'aides!

EDIT: Vous pouvez éviter toutes les boucles imbriquées idiotes. L'exemple ci-dessus doit être écrit comme:

{% set value = content.field_select_list.0['#markup'] %}
{{ value }}

Pour un champ Texte (simple), il pourrait ressembler à quelque chose comme:

{{ content.field_text.0['#context'].value }}

Pour obtenir une valeur d'URL à partir d'un champ Lien, j'ai vu des suggestions comme:

{{ content.field_link['#items'].0.value.uri }}

Mais il aurait un préfixe "internal: /", donc j'ai eu plus de chance avec quelque chose comme ceci:

{{ content.field_link.0['#title'] %}
jimafisk
la source
Vous pouvez utiliser paragraph.field_my_text.valuedans n'importe quel modèle de paragraphe pour générer la valeur simple et non formatée, tout comme node.field_my_text.valuedans un modèle de nœud.
Philipp Michael
comment imprimer le paragraphe - votre_nom_de_machine.html.twig à partir de votre modèle principal?
Sam