J'ai un fichier twig: views-view-unformatted - view-machine-name.html.twig
{#
/**
* @file
* Default theme implementation to display a view of unformatted rows.
*
* Available variables:
* - title: The title of this group of rows. May be empty.
* - rows: A list of the view's row items.
* - attributes: The row's HTML attributes.
* - content: The row's content.
* - view: The view object.
* - default_row_class: A flag indicating whether default classes should be
* used on rows.
*
* @see template_preprocess_views_view_unformatted()
*
* @ingroup themeable
*/
#}
{% if title %}
<h3>{{ title }}</h3>
{% endif %}
{% for row in rows %}
{%
set row_classes = [
default_row_class ? 'views-row',
]
%}
<div{{ row.attributes.addClass(row_classes) }}>
{{ row.content }}
</div>
{% endfor %}
Je veux avoir Title
et body
champ pour être sur 1 ligne séparée par une virgule comme:
titre, corps
Comment puis-je obtenir la valeur de 'title' ou 'body' ou de tout autre champ dans cette vue pendant le débogage?
J'ai utilisé kint (title) et kint (body) mais cela ne fonctionne pas. J'ai aussi fait debug = TRUE;
dans le fichier des services.
Mais je ne peux pas comprendre comment avoir une valeur de champs dans une brindille html non formatée.
Comme vous pouvez le voir dans views-view-unformatted.html.twig , il indique ce que dit également le code commenté que vous avez montré, il n'y a pas de variable de champs. Par conséquent, ce modèle n'est pas utilisé pour les champs.
Variables disponibles:
- title: le titre de ce groupe de lignes. Peut être vide.
- lignes: liste des éléments de ligne de la vue.
- attributs: les attributs HTML de la ligne.
- contenu: le contenu de la ligne.
- view: l'objet de vue.
- default_row_class: indicateur indiquant si les classes par défaut doivent être utilisées sur les lignes.
Si vous souhaitez utiliser des champs dans un modèle de vue, utilisez views-view-fields - [view-name] -- [machine-name] . Html. brindille . Là, vous pouvez imprimer vos champs comme ceci:
<span>{{ fields.title.content }},</span><span>{{ fields.body.content }}</span>
J'ai trouvé un moyen d'utiliser Kint, vous pouvez obtenir des valeurs de champ dans views-view - unformatted.html.twig
si vous voulez un champ spécifique
Pour obtenir la valeur des champs de texte
{{row.content['#row']._entity.field machine name[0].value}}
Pour obtenir des champs d'image src
{{file_url(row.content['#row']._entity.field machine name.entity.uri.value)}}
Pour obtenir l'image alt, titre, largeur, hauteur
{{row.content['#row']._entity.field machine name[0].alt/title/width/height}}
Remarque: remplacez le nom de la machine de champ par le nom de votre machine de champs
Si vous voulez parcourir plusieurs champs
{% for i in range(0, 10) %}
{{ row.content['#row']._entity.body[i].value }}
{% endfor %}
Si vous voulez une valeur brute
{% for i in range(0, 10) %}
{{ row.content['#row']._entity.body[i].value|raw }}
{% endfor %}
J'ai trouvé un moyen d'utiliser kint.
Dans votre views-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 %}
Voici l'exemple de code pour accéder aux valeurs de champ dans le fichier views-view-unformatted.html.twig -
{% 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 %}
Vous devez créer trois fichiers pour remplacer les vues à l'aide des fichiers twig.
1. vues-vue - foobar.html.twig
2. vues-vue-non formatées - foobar.html.twig
3. vues-vues-champs - foobar.html.twig
Le but des trois fichiers est décrit ci-dessous:
1: implémentation du thème par défaut pour le modèle de vue principale.
2: implémentation du thème par défaut pour afficher une vue des lignes non formatées.
3: Modèle de vue par défaut pour afficher tous les champs dans une rangée.
Vous devez utiliser "views-view-fields - foobar.html.twig" pour afficher chacun de vos champs sur les vues.
Voici un exemple:
<li>
<p>{{ fields.title.content }}</p> // Title field
<p>{{ fields.body.content }}</p> // Body field
<span>{{ fields.created.content }}</span> // Node authored date field
<a href="{{ fields.path.content }}" class="readmore"> read more </a> // Link to actual page
</li>
D'après mon expérience, il n'y a pas de moyen facile de twig in views-views-unformatted - view-.html.twig une valeur provenant de champs ne faisant pas partie de la structure d'entité.
Très pour imprimer un champ text (plain)
. Si pénible d'imprimer un flag_field
, entity_reference
etc.
Devant y parvenir sans passer par tout le code de base de la vue, j'ai dû construire ce hack:
Plus de détails ici https://drupal.stackexchange.com/a/288316/1376