4.5.7. Агрегация данных во Views.

Главные вкладки

levmyshkin 8 июля 2019 в 14:08

Модуль Views позволяет, не только выводить данные из таблиц друпала как они есть, но он также умеет подсчитывать это строки и группировать результаты. Эта возможность называется агрегацией (aggregation).

Видео:
https://www.youtube.com/watch?v=nxxaT-ANmFg

По умолчанию из коробки в друпале есть словарь таксономии Тэги (Tags). Давайте создадим блок с самыми популярными тегами и выведем в конце каждого тега, сколько материлов на сайте с этим тэгом. У нас получится примерно такой список:

  • Drupal 8 (10)
  • Drupal 7 Diablo
  • PHP (3)

Для начала вам нужно будет создать статьи (Articles) и привязать к ним тэги.

/node/add/article

drupal views

После создания небольшого количества статей, можно приступать к делу.

/admin/structure/views/add

Добавляем Views блок, выбираем Таксономию и словарь Теги:

Drupal views

Дальше нужно включить агрегацию во Views'е:

Drupal aggregation

Теперь у нас появились дополнительные настройки агрегации в полях:

друпал вьюс

Теперь добавляем связь Материалы с термином:

Друпал вьюс

Здесь заполняем обязательность связи, чтобы подсчитывать только те материалы в которых выбран тег:

друпал вьюс

Теперь нам нужно два поля Термин таксономии (Имя), первое мы скрываем:

Views

Второму полю мы выставляем тип агрегации Количество (Count):

Друпал

Теперь если вы обновите предпосмотр вьюса то вы уже увидите подсчет количества использования каждого из термина таксономии:

Друпал 8

Теперь осталось дописать имя тега перед каждым числом. Для этого мы используем второе поле, в котором мы выведем первое скрытое поле и в скобках значение второго поля. Для этого мы будем использовать настройку Перезаписать результаты:

друпал 8

В выпадающем списке Подстановочные шаблоны мы можем посмотреть какие поля мы можем использовать при перезаписывание этого поля.

{{ name }} ({{ name_1 }})

Мы пишем второе поле в скобочках круглых, чтобы наше число было в скобках. Фигурные скобки берутся из Twig'a, мы будем с ним разбираться позже, пока нам достаточно знать, что если мы используем эти значения в {{ }} они будут заменяться на значения нужных нам полей.

В результате у вас должны быть вот такие вот поля:

агрегация

Что должно выглядеть вот так:

Drupal views агрегация