it-swarm.com.de

Zugriff auf einzelne Felder in Drupal 8-Ansichtenvorlagen

Ich habe Probleme, etwas zu tun, von dem ich denke, dass es relativ einfache Drupal-Ansichten sein sollte.

Ich habe einen Inhaltstyp namens Länder. Ich möchte die 3 neuesten Länderknoten auf meiner Homepage in einem Ansichtenblock anzeigen. Jedes Land wird mit der Klasse "views-row" im Container div angezeigt. Ich verwende views - view - unformatated - countries - block_1.tpl, um die Ausgabe zu erstellen.

Ich möchte etwas wie das folgende Markup ausgeben:

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

Mein Problem ist der Zugriff auf einzelne Felder in der Vorlage. Wenn ich einen Ansichtsmodus verwende, kann ich auf einzelne Felder zugreifen. Wenn ich in der Ansicht "Felder anzeigen" auswähle, kann ich ein Feld für "Ergebniszähler für Ansicht" und "Pfad" hinzufügen, in dem ich die Klasse "view-row-N" hinzufügen und das Tag mit dem Knoten verknüpfen kann , aber ich kann nicht einzeln auf die Felder zugreifen. Ich habe die Variable {{row.content}}, aber jeder Versuch, weiter in die Variable zu tauchen (zB row.content.field_name), gibt mir nichts und der Aufruf eines {{dump (row.content)}} stürzt die Website ab.

Ich kann dies aus zwei Gründen nicht als Ansichtsmodus ausgeben. Ich habe keinen Zugriff auf die Felder "Ergebniszähler anzeigen" oder "Pfad" in einem Ansichtsmodus, und selbst wenn ich diese Variablen hätte, wären einige Felder in anderen verschachtelt.

Ich finde, das sollte so einfach sein wie

<a class="view-row-{{ row.content.view_result_counter }}" href="{{ row.content.path }}">

etc aber ich habe alles versucht was mir einfällt. Bin ich völlig auf dem falschen Weg? Twig und ich kommen nicht so weit ...

7
Kaizen9001

Ich habe einen Weg gefunden, Kint zu verwenden.

Verwenden Sie in Ihrer 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 %}
9
Ibrahim Samir

Ich bin nicht sicher, ob es das ist, was Sie erwarten, aber Sie können die Feldvorlage überschreiben:

  1. Twig-Debugging aktivieren: https://www.drupal.org/node/1903374
  2. Überprüfen Sie Ihre Seite im Browser (wenn sich die Site im Debug-Modus befindet, gibt es Kommentare in HTML mit Pfaden zu Vorlagen für jedes Element). Zum Beispiel ist dies eine Feldvorlage: core/themes/stable/templates/views/views-view-fields.html.twig
  3. Kopieren Sie die erforderliche Vorlage in Ihren Designordner
  4. Markup hinzufügen oder ändern.

Sie können die Vorlage mit {{ dump(variable) }} oder {{ kint(variable) }} debuggen.

0
fadehelix

Die Lösung ist einfach, die Ansichtenfeldvorlage zu verwenden.

Ich habe eine neue Vorlage im Ordner themes/templates erstellt:

views-view-fields--VIEW-NAME.html.twig

Und jetzt können Sie auf Ihre Feldwerte wie folgt zugreifen:

{{ fields.field_NAME.content }}
0
Viswa

Die Verwendung des Inhalts-/Ansichtsmodus funktioniert in Ihrem Fall.

1/In "views-view-unformatted.html.twig" können Sie "loop.index" in der "for" -Schleife verwenden, um den Index der aktuellen Zeile abzurufen und ihn der Variablen "row_classes" hinzuzufügen.

2/In der Zweigvorlage für den Knoten können Sie Folgendes verwenden:

<a href="{{ path('entity.node.canonical', {'node': node.id}) }}">
    {{ content.field_img }}
    {{ node.getTitle()}}
</a>

3/Sie erhalten wahrscheinlich zusätzliches HTML, aber Sie können das meiste davon entfernen, indem Sie relevante Vorlagen überschreiben.

0
progzy

In Ihrem Fall sollten Sie Ansichten-Ansicht-Felder - Länder - block_1.html.twig anstelle von Ansichten-Ansicht-unformatiert - Länder - Block_1.html verwenden. Zweigdatei. 

Die Vorlage für die Ansichtsfelder wird für alle Ergebniszeilen iteriert. Ihre Ansichten-Sicht-Felder - Länder - block_1.html.twig sollten den folgenden Code enthalten -

<div>
  <a class="view-row" href="{{variable-to-print-path }}">
   <img src="{{ image-path }}">
   <h3>{{ fields.title.content</h3>
  </a>
</div>

Sie können das Feld der Felder überprüfen, indem Sie die kint-Funktion wie - {{kint (fields)}} verwenden.

Überprüfen Sie in der Ausgabe der Kint-Funktion, ob der Bildpfad und der Ankerpfad variabel sind. 

Wenn Sie dies in Views-View-Unformatted - countries - block_1.html tun möchten. twig, dann können Sie auf die Feldwerte wie folgt zugreifen - 

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