フィールドテンプレートを上書きしています
views-view-fields--machine_name.html.twig
一部のフィールドを他のフィールドとは異なるdivにレンダリングしたい。フィールドを2回レンダリングしたくありません。
<div class="foo">
{{ fields.field_events_date_start.content }}
{{ fields.field_events_date_start_1.content }}
</div>
{% for field in fields -%}
{{ field.separator }}
{%- if field.wrapper_element -%}
<{{ field.wrapper_element }}{{ field.wrapper_attributes }}>
{%- endif %}
{%- if field.label -%}
{%- if field.label_element -%}
<{{ field.label_element }}{{ field.label_attributes }}>{{ field.label }}{{ field.label_suffix }}</{{ field.label_element }}>
{%- else -%}
{{ field.label }}{{ field.label_suffix }}
{%- endif %}
{%- endif %}
{%- if field.element_type -%}
<{{ field.element_type }}{{ field.element_attributes }}>{{ field.content }}</{{ field.element_type }}>
{%- else -%}
{{ field.content }}
{%- endif %}
{%- if field.wrapper_element -%}
</{{ field.wrapper_element }}>
{%- endif %}
{%- endfor %}
これらのフィールドをビューの表示から除外すると、以前にレンダリングしたときと通常のコンテンツ領域の両方で非表示になります。
{{ content|without('field_events_date_start,field_events_date_start_1') }}
...コンテンツではなくフィールドをレンダリングしているため、機能しません。
フィールドを以前にレンダリングし、後で除外するにはどうすればよいですか?
fields
から2つのフィールドを削除する必要があります。
<div class="foo">
{{ fields.field_events_date_start.content }}
{{ fields.field_events_date_start_1.content }}
</div>
{% for field in fields|without('field_events_date_start', field_events_date_start_1') %}
...
{% endfor %}
これは私が先週行ったこの例です。
ファイル名_views-view-fields--view_name--display_id.html.twig
_つまり、私の場合は_views-view-fields--acquia-search--results.html.twig
_です。
_{{ fields.title.content }}
<p class="search-result__item-description">{{ fields.search_api_excerpt.content }}</p>
<ul class="search-result__item-meta">
<li class="search-result__item-link"><span class="label">View More:</span> {{ fields.url.content }}</li>
<li class="search-result__item-date"><span class="label">Date Modified:</span> {{ fields.changed.content }}</li>
</ul>
_
私は自分の裁量でフィールドを印刷し、独自のマークアップを提供しています。
Twig XDebug をインストールすると、{{ breakpoint() }}
をテンプレートにドロップして変数を確認できます。