У меня была задача выводить в 1 view несколько полей из определённого типа материала. Точнее, это была страница, где во вкладках выводятся контакты офисов: город, адрес, телефон, карта и т.д.
Пришлось под дизайн делать свой twig. Тем более задача - использовать tailwind css. Я сделал шаблон views-view-list--MYVIEWNAME.html.twig в папке templates/views/
Так вот, я столкнулся с проблемой, описанной тут: Drupal.org Forum
То есть, когда я хочу вывести значение поля в шаблоне twig {{view.field.field_name.original_value}}, то получаю вместо нескольких городов офисов список по количеству материалов с одним городом. Что-то вроде: Лондон, Лондон, Лондон и т.д. А должно быть Лондон, Нью-Йорк, Амстердам и т.д.
Поиск в гугл почти ничего не дал, но натолкнул использовать другой способ поля: row.content['#row']._entity.fields.field.field_name.value
Кроме того пришлось посидеть с {{ dump(всякие-разные-варианты) }} И, о чудо, это работает!
Например, title можно выводить так: row.content['#row']._entity.fields.field.title.value
Например, можно вывести поля списком таким образом:
<ul id="contacts-tabs-list" class="">
{% for row in rows %}
{% set field = row.content['#row']._entity.fields %}
<li{{row.attributes.addClass('')}}>
<button x-on:click="openTab = {{- field.nid.value -}}" :class="{ 'bg-lawsblue text-white': openTab === {{- field.nid.value -}}, 'bg-lawsgrey': openTab !== {{- field.nid.value -}} }" class="py-4 px-12 bg-lawsgrey hover:bg-lawsblue hover:text-white rounded">
{{- field.title.value -}}
</button>
</li>
{% endfor %}
</ul>
Но тут возникает другая проблема - переводы entity не работают, если у вас мультиязычный сайт. Вот описание: Drupal StackExchange
Поэтому делаем так:
/**
* Implements hook_preprocess_HOOK() for views_view_unformatted template.
*/
function MYTHEMENAME_preprocess_views_view_list__MYVIEWNAME(&$variables)
{
$variables['lang'] = \Drupal::languageManager()->getCurrentLanguage()->getId();
}
и тогда меняем код так:
<ul id="contacts-tabs-list" class="">
{% for row in rows %}
{% set field = row.content['#row']._entity.translation(lang).fields %}
<li{{row.attributes.addClass('')}}>
<button x-on:click="openTab = {{- field.nid.value -}}" :class="{ 'bg-lawsblue text-white': openTab === {{- field.nid.value -}}, 'bg-lawsgrey': openTab !== {{- field.nid.value -}} }" class="py-4 px-12 bg-lawsgrey hover:bg-lawsblue hover:text-white rounded">
{{- field.title.value -}}
</button>
</li>
{% endfor %}
</ul>
Вот теперь переводы работают!