J'ai besoin de prendre le contrôle du rendu d'un field_admin_tags
champ dans un node.html.twig
modèle.
Cela marche:
{{ content.field_admin_tags }}
- Rend tout (étiquette + toutes les valeurs de champ){{ content.field_admin_tags.0 }}
- N'affiche que la première valeur du champ et aucune étiquette
PROBLÈME: je n'ai aucun contrôle sur le balisage entourant les balises, par exemple <ul><li>...</li></ul>
.
Mon idée était donc de parcourir le tableau de rendu .
Mais cela ne fonctionne PAS:
{% for tag in content.field_admin_tags %}
{{ tag }}
{% endfor %}
Je reçois: Exception: Object of type Drupal\node\Entity\Node cannot be printed
.
Je pense que j'itère sur les clés / valeurs du tableau de rendu par rapport aux éléments à l'intérieur du champ (si j'imprime un "X" dans chaque boucle, j'obtiens 20 X alors que je n'ai que deux ou trois valeurs dans ce champ) .
Je voudrais itérer content.field_admin_tags.0
, content.field_admin_tags.1
etc.
Une idée de comment résoudre ce problème? Merci.
Réponses:
Vous pouvez résoudre ce problème dans une branche de champ. Là, vous pouvez utiliser la boucle existante pour parcourir les éléments de champ:
node.html.twig
champ - field-admin-tags.html.twig
Cet exemple remplace
<div>
par<ul>
. Ne supprimez pas{{ attributes }}
ou ne contournez pas le modèle de champ, voir Qu'est - ce qui peut briser quickedit et comment le corriger?la source
{{ content.field_admin_tags }}
D'accord avec 4k4, le modèle de champ est le meilleur endroit, si vous le voulez vraiment dans le modèle d'entité (par exemple, le nœud), vous pouvez faire quelque chose comme ceci:
Mais honnêtement, je pense que c'est un peu moche, le modèle de champ est le bon endroit.
la source
Si vous, comme moi, cherchez un moyen de parcourir les paragraphes du modèle de brindille d'un nœud, voici comment le faire:
Supposons que vous ayez un nœud avec un champ de paragraphe à plusieurs valeurs, afin qu'un éditeur de contenu puisse créer plusieurs paragraphes et que vous souhaitiez parcourir chaque paragraphe sur le modèle de brindille de nœuds (par exemple pour ajouter un wrapper autour de chaque paragraphe):
MISE À JOUR: J'avais besoin de trouver une autre façon d'imprimer tous les paragraphes sans utiliser de contenu. La variable de contenu contient tout ce que vous avez configuré dans la section `` Gérer l'affichage '' du nœud, mais ma méthode de travail actuelle consiste à ne jamais utiliser `` Gérer l'affichage '' ni les mises en page car vous pouvez réellement accéder à toutes les données du fichier de brindille du nœud, et presque tous les réglages que vous feriez sur "Gérer l'affichage", comme appliquer un style d'image, ou définir un format de date, ... vous pouvez le faire directement en brindille.
Pour moi, c'est un avantage car je sais que tout ce que je vois provient du fichier twig, et je n'ai pas besoin de rechercher des paramètres de champ obscurs qui peuvent ajouter des classes quelque part. Donc, tout ce que je vois vient d'un seul endroit (le fichier de brindille des nœuds) et non d'une combinaison du fichier de brindille et de l'écran d'affichage de gestion.
Quoi qu'il en soit, en utilisant le module génial Twig Tweak, voici comment imprimer un champ de paragraphe à valeurs multiples dans le fichier twig d'un nœud sans avoir à utiliser la variable de contenu:
la source
J'ai trouvé la
#items
propriété utile lors de la construction de boucles de longueur inconnue dans Twig:la source
Si vous souhaitez placer des wrappers supplémentaires autour des champs à l'intérieur du champ de paragraphe ou avez besoin pour une raison quelconque d'une valeur de champ de référence de paragraphe particulière, vous pouvez effectuer les opérations suivantes:
En faisant cela
{{kint(content.paragraph_field_name[key])}}
, vous verrez que les champs sont accessibles à l'intérieur de la partie ['# paragraph'] du tableau.la source