
Темизируем вывод Views
Интерфейс Views предоставляет два базовых способа формирования списков или представлений: содержимое и поля.
Первый вариант позволяет выбрать способ отображения, а форматтеры полей, видимость определяется через форму управления отображением полей.
Второй вариант позволяет манипулировать полями так, как вам захочется: менять порядок отображения, скрывать, переопределять значения токетами и многое другое. Также появляется возможность настраивать оформление полей, выбирать форматтеры. Это очень удобно, если полей немного, но если их выводится в представлении более 10, то управление их отображением становится довольно сложным процессом. К тому же html-структура хранится в базе данных, что делает управление ей ненаглядным. И можно забыть о версионировании. Использовать git тоже не получится, если только не переносить код каждый раз вручную в файлы.
Еще одной проблемой такого подхода является снижение производительности - количество запросов в базу данных значительно возрастает.
Наиболее удобным способом работы со сложными views-представлениями является шаблонизирование. Начиная с Drupal 8 эта CMS использует шаблонизатор Twig. С помощью шаблонов можно переопределить и темизировать практически что угодно, но нас интересует Views.
Для примера создадим новый режим отображения для типа материала Article, например Template. В настройках отображения типа материала определим как и с какими форматтерами будут отображаться страницы. Настроим представление Frontpage для отображения страниц и выберем для него способ отображения Содержимое. Перейдя на главную страницу, мы увидим, что наши статьи отображают поля, настроенные нами ранее. Применились фильтры и сортировка, указанные нами во Views.
Но нам нужно не просто вывести поля, но и темизировать их. Для этого создадим шаблон node--view--frontpage--page-1.html.twig (оригинал ноходится в папке Templates модуля Views). Этим мы переопределили стандартный вывод главной страницы сайта, то есть страницы Frontpage модуля Views.
Теперь можно удалить всё содержимое шаблона и добавить twig-теги для вывода необходимых нам полей, например {{ label }} или {{ content.field_article_body}}. Twig позволяет свободно работать с HTML, поэтому мы можем выстроить любую структуру представления, обернуть поля в <div> или <span>.
Очистив кеш, мы увидим нашу новую структуру представления. Да, отмечу, что заголовок материала выводится без ссылки, пожтому её нужно указать отдельно примерно такой конструкцией: <h2><a href="{{ url }}">{{ label }}</a></h2>
Описанная выше схема позволяет использовать всю мощь фильтров и сортировок Views со стандартным выводом полей. Тем самым мы решаем и проблему избыточного количества запросов в базу данных и ограниченность базового вывода полей в материалах.
Но Views позволяет использовать и сложную логику вывода данныз через связи и контекстные фильтры. Это бывает необходимо для вывода сложного контента. В таком случае выберем способ отображения Поля и добавим необходимые поля, расставим в сообтветствии с логикой отображения. Но темизировать в админке мы с вами не будем, а снова создадим шаблон, в этот раз с именем views-view-fields--frontpage--page_1.html и добавим в него twig-теги для наших полей. Например, {{ fields.field_article_body.content }} или {{ fields.name.content }}. Названия полей можно найти в списке Подстановочные шаблоны в настройках любого поля. Темизировать поля можно также любым html-кодом и css-стилями.
Этот способ также позволяет нам отделить логику от структуры и оформления контента, к тому же мы получаем больше настроек для полей. Проблему большого количества запросов в базу данных теперь решить не получится, потому что Drupal хранит все данные и настройки полей Views именно в базе данных. Я рекомендую использовать вывод полей через Views в случае, если их не более 10.