Comment obtenir chaque valeur de champ dans views-views-unformatted - view-machine-name.html.twig?

19

J'ai un fichier de brindille: 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 Titleet body champ pour être en 1 ligne séparés par des virgules comme:

titre, corps

Comment puis-je obtenir la valeur de «titre» ou «corps» ou tout autre champ dans cette vue lors du débogage?

J'ai utilisé kint (title) et kint (body) mais cela ne fonctionne pas. J'ai aussi fait debug = TRUE;dans le dossier des services.

Mais je ne peux pas comprendre comment avoir une valeur de champs dans une brindille html non formatée.

Sugandh Khanna
la source

Réponses:

20

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: une 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 - [nom-vue] - [nom-machine] .html.twig . Là, vous pouvez imprimer vos champs comme ceci:

<span>{{ fields.title.content }},</span><span>{{ fields.body.content }}</span>
Pas de sueur
la source
nom_vue avec trait de soulignement conservé, tandis que le nom de la machine avec trait de soulignement est transformé en virgule
Matoeil
1
views-view-fields.html.twig peut être copié à partir du dossier / core / modules / views / templates puis renommé comme ci-dessus. Pour une vue donnée avec un nom de machine de foobar, alors le nouveau nom peut être views-view-fields - foobar.html.twig. Plus d'informations sur les conventions de dénomination sont disponibles ici: drupal.org/docs/8/theming/twig/twig-template-naming-conventions
bkudrle
13

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 %}
Sathish Sundar
la source
7

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 %}
Ibrahim Samir
la source
Comment utiliser le champ d'image. Lorsque j'utilise field_image, il n'y a pas de sortie. L'URL de l'image ne s'affiche ni ne s'affiche!
Harish ST
4

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 %}
Renuka Kulkarni
la source
Parfait! C'est la chose que je veux savoir, merci Renuka.
Niladri Banerjee - Uttarpara
3

Vous devez créer trois fichiers pour remplacer les vues à l'aide de fichiers de brindilles.
1. vues-vue - foobar.html.twig
2. vues-vue-non formaté - foobar.html.twig
3. vues-vue-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: Gabarit de vue par défaut pour afficher tous les champs consécutifs.

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>
Pranay Agarwal
la source
Salut, j'ai essayé ce qui précède dans views-view-foobar.html.twig mais je n'ai pas pu imprimer un seul champ. Je débogue des champs en utilisant kint (), il montre le tableau «rien» en haut.
Shakil Ahmad
0

D'après mon expérience, il n'y a pas de moyen facile de saisir dans views-views-unformatted - view-.html.twig une valeur provenant de champs ne faisant pas partie de la structure de l'entité.

Très pour imprimer un text (plain)champ. Si pénible d'imprimer un flag_field, entity_referenceet ainsi de suite.

Devant y parvenir sans passer par tout le code de base de la vue, j'ai dû construire ce hack:

  1. ajouter une fausse entité de champ de texte brut
  2. accrochez la valeur du champ de vue dans un module personnalisé:
  3. brindille (enfin) la valeur souhaitée dans le modèle

Plus de détails ici /drupal//a/288316/13760

août
la source