比較的シンプルであると思う何かをするのに問題がありますdrupal 8ビュー。
Countriesというコンテンツタイプがあります。私のホームページの3つの最新の国ノードをビューブロックに表示したいと思います。各国は、コンテナーdivに「views-row」というクラスで表示されます。私はviews--view--unformatted--countries--block_1.tplを使用して出力をテンプレート化しています。
次のマークアップのようなものを出力したいと思います:
<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>
私が抱えている問題は、テンプレートの個々のフィールドにアクセスすることです。表示モードを使用すると、個々のフィールドにアクセスできます。ビューで「フィールドを表示」を選択すると、「ビュー結果カウンター」と「パス」のフィールドを追加できます。これにより、「ビュー行N」クラスを追加して、タグをノードにリンクできます。 、しかし私はフィールドに個別にアクセスすることができません。私は{{row.content}}変数を持っていますが、変数(たとえば、row.content.field_name)をさらに掘り下げようとしても何も得られず、{{dump(row.content)}}を呼び出すとWebサイトがクラッシュします。
これを2つの理由で表示モードとして出力できません。表示モードで「表示結果カウンター」または「パス」フィールドにアクセスできません。これらの変数があったとしても、一部のフィールドは他のフィールド内にネストされます(画像とタイトルは内にネストされます)
これは本当に簡単なはずです。
<a class="view-row-{{ row.content.view_result_counter }}" href="{{ row.content.path }}">
など、私は考えられるすべてのものを試しました。私は完全に間違った道を進んでいますか? Twigそして私は今のところうまくいっていません...
私はキントを使用する方法を考え出しました。
Views-view-unformatted.html.twig内で、次のコードを使用して個々のフィールドを表示します。
{% for row in rows %}
{{ row.content['#view'].style_plugin.render_tokens[ loop.index0 ]['{{ YOUR_FIELD_NAME }}'] }}
{% endfor %}
期待どおりかどうかはわかりませんが、フィールドテンプレートをオーバーライドできます。
{{ dump(variable) }}
または{{ kint(variable) }}
を使用してテンプレートをデバッグできます
解決策は、ビューフィールドテンプレートを使用するだけです。
Themes/templatesフォルダーの下に新しいテンプレートを作成しました。
views-view-fields--VIEW-NAME.html.twig
これで、次のようにフィールドの値にアクセスできます。
{{ fields.field_NAME.content }}
あなたのケースではコンテンツ/ビューモードを使用できます。
1 /「views-view-unformatted.html.twig」では、「for」ループで「loop.index」を使用して現在の行のインデックスを取得し、「row_classes」変数に追加できます。
2/twigノードのテンプレートでは、次のようなものを使用できます。
<a href="{{ path('entity.node.canonical', {'node': node.id}) }}">
{{ content.field_img }}
{{ node.getTitle()}}
</a>
3 /おそらく余分なhtmlを取得しますが、関連するテンプレートをオーバーライドすることで、そのほとんどを取り除くことができます。
あなたの場合、views-view-unformatted--countries--block_1.htmlの代わりにviews-view-fields--countries--block_1.html.twigを使用する必要があります。 twigファイル。
ビューフィールドテンプレートは、結果のすべての行で反復します。あなたのviews-view-fields--countries--block_1.html.twigは以下のコードを含む必要があります-
<div>
<a class="view-row" href="{{variable-to-print-path }}">
<img src="{{ image-path }}">
<h3>{{ fields.title.content</h3>
</a>
</div>
-{{kint(fields)}}のようなkint関数を使用して、fields配列を確認できます。
Kint関数の出力から画像パスとアンカーパス変数を確認します。
これをviews-view-unformatted--countries--block_1.htmlで行いたい場合。小枝、それからあなたは以下のようなフィールド値にアクセスできます-
{% 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 %}