J'ai du mal à faire quelque chose qui, à mon avis, devrait être relativement simple. Drupal 8 vues.
J'ai un type de contenu appelé pays. Je souhaite afficher les 3 derniers nœuds de pays sur ma page d'accueil dans un bloc de vues. Chaque pays est affiché avec la classe "views-row" sur le conteneur div. J'utilise des vues - view - unformatted - countries - block_1.tpl pour modéliser la sortie.
Je voudrais sortir quelque chose comme le balisage suivant:
<a class="view-row-1" href="/link/to/node">
<img src="source-of-teaser-image.png">
<h3>Title of node</h3>
</a>
<a class="view-row-2" href="/link/to/node">
<img src="source-of-teaser-image.png">
<h3>Title of node</h3>
</a>
<a class="view-row-3" href="/link/to/node">
<img src="source-of-teaser-image.png">
<h3>Title of node</h3>
</a>
Le problème que j'ai est d'accéder à des champs individuels dans le modèle. Si j'utilise un mode d'affichage, je peux accéder à des champs individuels. Si je sélectionne "afficher les champs" dans la vue, je peux ajouter un champ pour "compteur de résultats de vue" et "chemin", ce qui me permettrait d'ajouter la classe "view-row-N" et de lier la balise a au noeud. , mais je ne peux pas accéder aux champs individuellement. J'ai la variable {{row.content}}, mais toute tentative de creuser davantage dans la variable (par exemple, row.content.field_name) ne me donne rien et l'appel d'un {{dump (row.content)}} bloque le site Web.
Je ne peux pas sortir ceci comme mode d'affichage pour 2 raisons. Je n'ai pas accès aux champs "compteur de résultats de vue" ou "chemin" dans un mode d'affichage et, même si j'avais ces variables, certains champs seraient imbriqués dans d'autres (l'image et le titre sont imbriqués dans le)
Je pense que cela devrait être aussi simple que
<a class="view-row-{{ row.content.view_result_counter }}" href="{{ row.content.path }}">
etc mais j'ai essayé tout ce que je peux penser. Suis-je complètement sur le mauvais chemin? Twig et moi ne nous entendons pas si loin ...
J'ai imaginé un moyen d'utiliser kint.
Dans vos affichages-view-unformatted.html.twig, utilisez le code suivant pour afficher vos champs individuels:
{% for row in rows %}
{{ row.content['#view'].style_plugin.render_tokens[ loop.index0 ]['{{ YOUR_FIELD_NAME }}'] }}
{% endfor %}
Je ne sais pas si c'est ce que vous attendez, mais vous pouvez remplacer le modèle de champ:
Vous pouvez déboguer un modèle en utilisant {{ dump(variable) }}
ou {{ kint(variable) }}
La solution est simple: utilisez le modèle de champs de vues.
J'ai créé un nouveau modèle sous le dossier themes/templates:
views-view-fields--VIEW-NAME.html.twig
Et maintenant, vous pouvez accéder aux valeurs de vos champs comme ceci:
{{ fields.field_NAME.content }}
L'utilisation du contenu/mode d'affichage fonctionne dans votre cas.
1/Dans "views-view-unformatted.html.twig", vous pouvez utiliser "loop.index" dans la boucle "pour" pour obtenir l'index de la ligne actuelle et l'ajouter à la variable "row_classes".
2/Dans le modèle de brindille pour le nœud, vous pouvez utiliser quelque chose comme:
<a href="{{ path('entity.node.canonical', {'node': node.id}) }}">
{{ content.field_img }}
{{ node.getTitle()}}
</a>
3/Vous obtiendrez probablement du code HTML supplémentaire, mais vous pouvez vous en débarrasser en supprimant les modèles pertinents.
Dans votre cas, vous devriez utiliser vues-vue-champs - pays - block_1.html.twig au lieu de vues-vue-non formaté - pays - block_1.html. fichier de brindille.
Le modèle de champs de vues itérera sur toutes les lignes du résultat. Vos vues-view-champs - pays - block_1.html.twig devraient contenir le code ci-dessous -
<div>
<a class="view-row" href="{{variable-to-print-path }}">
<img src="{{ image-path }}">
<h3>{{ fields.title.content</h3>
</a>
</div>
Vous pouvez vérifier le tableau de champs en utilisant la fonction kint comme - {{kint (champs)}}
Vérifiez le chemin de l'image et la variable du chemin d'ancrage à partir de la sortie de la fonction kint.
Si vous voulez faire cela dans views-view-unformatted - countries - block_1.html. Twig, vous pouvez accéder aux valeurs de champ comme ci-dessous -
{% for row in rows %}
{% set photo = file_url(row['content']['#row']._entity.field_page_photo.entity.fileuri) %}
<li><img src={{ photo }} class="img-responsive img-circle"></li>
{% endfor %}