Wie erhält man jeden Feldwert in views-views-unformated - view-machine-name.html.twig?


19

Ich habe eine Zweig-Datei: Ansichten-Ansicht-unformatiert - Ansicht-Maschinenname.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 %}

Ich mag haben Titleund body Feld in 1 Zeile durch Komma getrennt sein wie:

Titel, Körper

Wie kann ich beim Debuggen den Wert von 'title' oder 'body' oder einem anderen Feld in dieser Ansicht ermitteln?

Ich habe kint (title) und kint (body) benutzt, aber es funktioniert nicht. Ich habe auch debug = TRUE;in der Servicedatei gemacht.

Aber ich kann nicht herausfinden, wie Felder in unformatiertem HTML-Zweig einen Wert haben.

Antworten:


20

Wie Sie in views-view-unformatted.html.twig sehen können , steht dort, was auch der von Ihnen angezeigte kommentierte Code sagt, dass es keine Variablenfelder gibt. Daher wird diese Vorlage nicht für Felder verwendet.

Verfügbare Variablen:

  • title: Der Titel dieser Zeilengruppe. Kann leer sein.
  • Zeilen: Eine Liste der Zeilenelemente der Ansicht.
    • Attribute: Die HTML-Attribute der Zeile.
    • content: Der Inhalt der Zeile.
  • view: Das Ansichtsobjekt.
  • default_row_class: Ein Flag, das angibt, ob Standardklassen für Zeilen verwendet werden sollen.

Wenn Sie Felder in einer Ansichtsvorlage verwenden möchten, verwenden Sie Ansichten-Ansichtsfelder - [Ansichtsname] - [Computername] .html.twig . Dort können Sie Ihre Felder folgendermaßen ausdrucken:

<span>{{ fields.title.content }},</span><span>{{ fields.body.content }}</span>

view_name mit Unterstrich beibehalten, während machine-name mit Unterstrich in Komma umgewandelt
Matoeil

1
views-view-fields.html.twig kann aus dem Ordner / core / modules / views / templates kopiert und dann wie oben umbenannt werden. Für eine bestimmte Ansicht mit dem Maschinennamen foobar kann der neue Name views-view-fields - foobar.html.twig lauten. Weitere Informationen zu Namenskonventionen finden Sie hier: drupal.org/docs/8/theming/twig/twig-template-naming-conventions
bkudrle

13

Ich habe mit Kint einen Weg gefunden. Sie können Feldwerte in der Ansichtsansicht abrufen - unformatted.html.twig

wenn Sie ein bestimmtes Feld möchten

Textfelder Wert erhalten

{{row.content['#row']._entity.field machine name[0].value}}

Bildfelder erhalten src

{{file_url(row.content['#row']._entity.field machine name.entity.uri.value)}}

Um Bildalt, Titel, Breite, Höhe zu erhalten

{{row.content['#row']._entity.field machine name[0].alt/title/width/height}}

Hinweis: Ersetzen Sie den Feldmaschinennamen durch Ihren Feldmaschinennamen

Wenn Sie mehrere Felder durchlaufen möchten

{% for i in range(0, 10) %}
  {{ row.content['#row']._entity.body[i].value }}
{% endfor %}

Wenn Sie Rohwert wollen

{% for i in range(0, 10) %}
  {{ row.content['#row']._entity.body[i].value|raw }}
{% endfor %}

7

Ich habe einen Weg mit Kint gefunden.

Verwenden Sie in Ihrer Datei views-view-unformatted.html.twig den folgenden Code, um Ihre einzelnen Felder anzuzeigen:

{% for row in rows %}

{{ row.content['#view'].style_plugin.render_tokens[ loop.index0 ]['{{ YOUR_FIELD_NAME }}'] }}

{% endfor %}

Verwendung von Image Field. Wenn ich field_image verwende, erfolgt keine Ausgabe. Die Bild-URL wird nicht angezeigt oder gerendert!
Harish ST

4

Unten finden Sie den Beispielcode für den Zugriff auf Feldwerte in der Datei 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 %}

Perfekt! Das ist das, was ich wissen möchte, danke Renuka.
Niladri Banerjee - Uttarpara

2

Sie müssen drei Dateien erstellen, um die Ansichten mithilfe von Zweigdateien zu überschreiben.
1. Ansichten-Ansicht - foobar.html.twig
2. Ansichten-Ansicht-unformatiert - foobar.html.twig
3. Ansichten-Ansicht-Felder - foobar.html.twig

Im Folgenden wird der Zweck aller drei Dateien beschrieben:
1: Implementierung des Standardthemas für die Hauptansichtsvorlage.
2: Standarddesign-Implementierung zum Anzeigen einer Ansicht unformatierter Zeilen.
3: Standardansichtsvorlage zum Anzeigen aller Felder in einer Reihe.

Sie sollten "views-view-fields - foobar.html.twig" verwenden, um jedes Ihrer Felder in Views auszugeben.

Unten ist ein Beispiel:

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

Hallo, ich habe das oben in views-view-foobar.html.twig ausprobiert, kann aber kein einziges Feld drucken. Ich debugge Felder mit kint (), es zeigt "nichts" -Array oben.
Shakil Ahmad

0

Aus meiner Erfahrung gibt es keine einfache Möglichkeit, in Ansichten-Ansichten-unformatiert-Ansicht-.html.twig einen Wert aus Feldern zu ändern, die nicht Teil der Entitätsstruktur sind.

Sehr, um ein text (plain)Feld zu drucken . So mühsam zu drucken flag_field, entity_referenceund so weiter.

Um dies zu erreichen, ohne den gesamten Kerncode der Ansicht durchzugehen, musste ich diesen Hack erstellen:

  1. füge eine gefälschte Klartextfeld-Entität hinzu
  2. Hängen Sie den Wert des Ansichtsfelds in ein benutzerdefiniertes Modul ein:
  3. Zweig (endlich) den gewünschten Wert in der Vorlage

Weitere Details finden Sie hier /drupal//a/288316/13760

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.