web-dev-qa-db-fra.com

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

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 bodychamp 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.

19
Sugandh Khanna

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>
20
No Sssweat

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

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 %}
7
Ibrahim Samir

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 %}
4
Renuka Kulkarni

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>
3
Pranay Agarwal

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:

  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 https://drupal.stackexchange.com/a/288316/1376

0
augusto