Drupal - группировка материалов во Views
Блог

Drupal - группировка материалов во Views

Небольшая заметка о группировке материалов во Views.
7 комментариев
Опубликовано 02.09.2016
2 мин.

Что-то последние все последние материалы у меня технические и давненько не было что-то попроще, но не менее полезного. В этот раз я расскажу о группировке материалов во Views.

С этой проблемой я столкнулся давно, году в 2013, когда серьезно занялся изучением Drupal. Тогда я только ещё знакомился и многих хитростей не знал, и часто прибегал к помощи сторонних модулей для решения своих задач, так как сил написать свой просто бы не хватило. И была задача, чтобы все материалы были выведены на одной странице, но сгруппированы по определенному признаку. То ли на тот момент во Views такой возможности не было, то ли я не смог найти это в сети, но зато я нашел для этого даже целый модуль, который это делал и делал это очень плохо. В последнее время что-то меня часто на проектах стали просить сделать ту или иную группировку содержимого, и я решил с этой темой разобраться и оказалось, что во Views эта возможность есть из коробки, а я никогда не обращал на это внимание. И вот дошли руки написать об этом :)

Уточняю сразу, гайд пишу по скринам Drupal 8, но в Drupal 7 это делается абсолютно также, вообще без изменений.

Что же за группировка такая? Это возможность во Views объединять выводимые материалы по определенному признаку. У этой возможности очень большой круг применения, например у сайта с едой - можно построить меню с группировкой по составу, или же по типу блюда, у медицинских сайтов по назначению, или же просто по первой букве, как часто на них бывает. Вот ещё парочка, визуальных примеров.

Так как же это делается? Давайте рассмотрим парочку примеров.

Пример №1

Начнем с примера который совпадает с первым изображением, будем группировать материалы по месяцу и году. Допустим у вас уже имеется views для вывода нужного содержимого на странице в обычном виде.

Для того чтобы группировать материалы, нам нужны поля, а конкретно, одно поле по значению которого будут группироваться материалы. Если у вас настроен вывод полей - то ничего сложного, вы добавляете нужное поле, в нашем случае поле с датой создания материала, и переходите к следующему шагу. А что если вы используете готовый вывод, или какой-то иной от полей? Вы можете заметить что поля вам добавлять нельзя, как у меня на скриншоте. На самом деле можете, просто для этого нужно Views указать, что нам даже при таком выводе нужны поля, и он даст возможность их использовать. Для этого необходимо нажать на настройки у формата вывода и выбрать "Принудительное использование полей".

После этого у нас появится возможность добавлять поля к нашему отображению. Теперь нам нужно добавить поле с датой публикации материала. Добавляем соответствующее поле и видим множество настроек.

Нас эти настройки интересуют, почему? Views будет группировать по полю, но откуда он знает как именно группировать? Для этого он группирует по конечному результату поля, а не по его исходному значению или чему-то ещё. Т.е. если отталкиваться от моего скриншота выше, группировка будет по формату даты 09/02/2016 05:31 - так как выбран данный формат даты и это будет результат поля. Вероятность что будет несколько материалов в 1 минуту - практически нереально для обычно сайта и просто бесполезно. Самое оптимальное, группировать по формату "Месяц ГОД". Для этого нам нужно сделать так, чтобы результат этого поля принимал данное значение. Это делается супер-просто, в формате даты, мы должны выбрать Custom и ввести нужный формат в соответствии с форматами дат PHP. Соответственно вводим нужный нам формат F Y

Ну и теперь нам необходимо включить группировку по значению данного поля. Для этого возвращаемся в настройки нашего формата вывода, где мы включали принудительное использование полей и видим что появилось новое поле для выбора группировки в котором нам нужно выбрать, какое поле будет использоваться для группировки материалов в данном Views.

Вот так просто группируются материалы по чему угодно.

Пример №2

Давайте рассмотрим ещё один пример, который может оказаться полезным. Давайте сгруппируем материалы по первой букве их заголовка. Можете попробовать сделать сами.

Для этого нам потребуется опять же, немного похимичить с выводимым значением поля. Первым делом, нужно, конечно же, добавить поле заголовка материала, чтобы оно стало доступным для группировки. Но ведь группировка будет происходить по цельному заголовку, а нам нужно по первой букве. Для этого в настройках поля есть раздел Rewrite results, который позволяет нам влиять на конечный результат значения. В нём нас интересует конкретно одна опция Trim this field to a maximum number of characters, которое позволяет обрезать значение поля. Так как мы группируем по первой букве заголовка, то и обрезать нам нужно до одного символа.

Далее нам необходимо данное поле выбрать в качестве группирующего содержимое. Ну и будет так же неплохо и логично добавить сортировку по заголовку в порядке возрастания, чтобы всё шло по алфавиту.

На этом всё, спасибо за прочтение :)

Drupal
Drupal 7
Drupal 8
Views
небольшой уютный чатик

Комментарии

АН
Алексей Никитин
пн, 10/23/2017 - 00:43

Здравствуйте! Спасибо за советы.

Сделал нечто подобное на сайте. Но столкнулся с такой проблемой.

Необходимо сгруппированные результаты вывести в колонки формата:

{{ group_field }} {{ content }}
{{ group_field }} {{ content }}
АН
Алексей Никитин
пн, 10/23/2017 - 11:09

Долго уже пытаюсь сделать это. Создание шаблона не помогает. Drupal просто не видит его. Я даже вносил временно изменения в шаблон ядра напрямую views-view-unformatted.html.twig - нет никаких изменений. Вероятно, Drupal берет формат вывода откуда-то еще конкретно в данном случае. Название моего views - "tracker", а в нем представление "page_1". Их я задавал в названии шаблона. И все же, даже правка родного шаблона не помогла...

Сбрасывал кеш после каждого изменения. Ничего не помогает. При этом, другие шаблоны я темизирую и они работают.

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

N
Niklan Алексей Никитин
пн, 10/23/2017 - 11:37

То как я понимаю "вывод групп в несколько колонок", я делал. Возможно вы что-то имеете другое под этим.

  1. Проверьте, у вас в нужном отображении вьюса где натсроена группировка, действительно ли выбран unformatted стиль?
  2. Если да, включите дебаг твига и посмортите откуда тянется шаблон, возможно что-то его перекрывает.
АН
Алексей Никитин
пн, 10/23/2017 - 13:42

Спасибо большое, все заработало. Не указал второй - в названии шаблона. После исправления ошибки с помощью шаблона unformatted вывел сетку, обернув весь вывод в класс.

a
admin
сб, 01/20/2018 - 13:10

Модули давно уже имеют русскоязычные переводы. Зачем всё на инглише шлёпать? Чтобы многие попросту закрыли ваш сайт и никогда на него не возвращались? Взялись писать статейку, так пишите, чтобы всем было понятно!

А
Андрей admin
сб, 04/07/2018 - 22:02

Всё правильно, пусть на английском будет. Серьезные заказы на сайты идут из-за бугра. Таким заказчикам русский не нужен. А девелоперам придется иметь дело с EN интерфейсом. Для них же лучше, бест практик. Кто не тянет инглишь - жертва естественного отбора.