В прошлых уроках я рассказывал, как создавать представления в виде страниц и блоков, а также как обьединять их между собой при помощи связей и настройки контекстных фильтров . Пришло время поговорить о агрегации.
Часто можно встретить в интернет магазинах, когда рядом со ссылкой стоит количество материалов, которое находиться на соответствующей странице. Этого эффекта можно достичь на друпал при помощи агрегации в представлении. Именно его мы и рассмотрим на примере словаря «Жанр».
Стандартная форма создания представления.
При создании сайта я заранее добавил словарь таксономии под названием «Жанр» (демо сайт над котором мы работаем описывался в первом уроке), теперь же он нам понадобится, как источник информации для нашей вьюхи.
Агрегация является одной из настроек модуля Views, поэтому первоначальной задачей для нас стоит создать представление на основе нужного нам материала. Пошаговый процесс создания новой вьюхи мы рассматривали в прошлых уроках, но для закрепления материала повторим. Наводим на раздел «структура», который находится на административной панели, находим подраздел представлений и в выплывающем окне кликаем по ссылке добавить.
Дальнейшая настройка неизменна, заполняем поля с названием и машинным именем, напомню, что последнее заполняется только буквами английского алфавита и только нижним регистром. Так как наше отображение будет выводить нам термины словаря, то в графе показать мы выбираем «термин таксономии», а в соседней графе под названием «типа» выбираем необходимый нам словарь, в моём случае это «Жанр».
Представление нам необходимо как блок, поэтому ставим галочку соответствующем разделе и задаём ему название. Формат мы выбираем, какой нам будет удобней для вывода нашего отображения на экране, в своём представление я выберу HTML список, состоящий из полей. И продолжаем настройку нашей вьюхи нажатием соответствующей кнопки.
Настройка
Реализуем подсчет количества материалов
Первоначальная задача, которая перед нами стоит, это создание связи. Для этого нам нужно надо раскрыть раздел «Расширенные настройки» ,найти графу под названием «Связь» и нажатием ссылки «Добавить» раскрыть окно связей.
Нам нужно связать материала с термином из словаря, поэтому в выплывающем окне находим поле под названием «Термин таксономии: Материал с термином», и добавляем его, ставя рядом с ним галочку. Нам нужна только эта связь, поэтому спокойно можно переходить в её настройки.
Для исключения из вывода жанров, не содержащие в себе не одной книги, пока что, мы делаем связь обязательной. Для этого ставим метку на соответствующем разделе и сохраняем.
Затем необходимо добавить поле, которое будет подсчитывать число книг, которые относятся к тому или иному жанру. Эту функцию выполнит поле Содержимое:Nid, которое мы и добавим.
Метка нам не нужна, поэтому в настройках соответствующего раздела убираем её и сохраняем наши настройки.
В этой статье мы планируем рассмотреть функцию модуля views под названием «Агрегация». Но для начала нам надо её включить. Это можно сделать, вернувшись в раздел «Расширенные настройки» и открыть поле под названием «Использовать агрегацию». По умолчанию рядом с этим полем стоит надпись «Нет», это означает, что агрегация выключена. Для её включения нажимаем на «Нет» и в открывшемся окне ставим галочку в нужном поле.
После того как мы всё сделали у нас появилась новая графа в настройках полей. Перейдя по ней мы можем настроить агрегацию для каждого конкретного поля отдельно. Нам же надо настроить её для поля Nid, поэтому перейдём по новой ссылки под этим полем.
После нажатия по кнопке перед нами высветиться окно с настройками, в нём мы выбираем какого типа будет наша агрегация. В нашем случае мы будем подсчитывать количество книг, поэтому мы выбираем тип счетчик.
Воспользовавшись предварительным просмотром можно увидеть, что у нас выводится термин нашего словаря, а под ним написано количество материалов, в нашем случае книг, которые имеют ссылку на этот термин.
Если всё выводиться правильно, то пора приступать к следующему этапу настройки нашего отображения, а именно к объединение полей, что бы у нас получилось одно поле обёрнутая в ссылку, которая будет ввести на страницу термина.
Объединяем поля
Что бы воплотить нашу задумку нам нужны ещё два поля,которые называются, Термин таксаномии: id термина, и «Глобальный : пользовательский текст» .Первое из которых нам необходимо что бы создать ссылку ведущую на страницу , а во второе для отображения информации в виде текста , кроме того она будет обёрнута в ссылку.
Так как мы включили агрегацию после добавления полей Drupal, нам кроме основных настроек также настройки агрегации.
Для глобального поля, в настройках агрегации нам не чего изменять не надо, по этому просто нажмём на кнопку применить.
А в основных настройках убираем галочку с создания метки и сохраняем настройки.
Для поля Термин таксономии, мы также не изменяем настройки агрегации и смело переходим в основные настройки.
В них мы исключаем данное поле из вывода, для этого мы ставим галочку на разделе «Исключить из вывода». Задачей этого поля является сформировать для нас ссылку, по этому на экране оно нам не нужно. И применяем наши настройки.
После всех настроек мы должны исключить из вывода все поля оставив только «Пользовательский текст». Это мы делаем потому что поля нам нужны в качестве информации и шаблонов, которые мы будем применять в оставшимся поле, по этому нам надо их убрать из вывода, но не удалять. Для этого нам необходимо зайти на каждое поле и поставить галочку на «Исключить из вывода».
Следующее, что нам нужно сделать, после того как мы исключили поля из вывода, это расставить их в необходимом, а точнее будет сказать в правильном для нашего случая, порядке. Нажимаем на треугольник, который находится рядом с кнопкой добавить и выбираем «Изменить порядок» .
Порядок мы должны выставить так, чтобы поле «Глобальный текст» был ниже всех остальных. Это необходимо не для выведения полей в правильном порядке, так как другие поля у нас скрыты, а для того что бы данное поле могло содержать в себе подстановочные шаблон всех полей представления.
После того, как мы выставили в правильном порядке наши поля пришло время настроить «Пользовательский текст».
Свои настройки начнём с заполнения поля «Текст». Для корректного заполнения откроем графу подстановочные шаблоны и выберем из них необходимые для нас. В своём случае я буду использовать шаблон [name], для того чтобы вывести название термина таксаномии, и [nid] который отвечает за вывод поля имеющего это же название (Nid). Напомню что поле Nid , в нашем случае, отвечает за количество книг привязанных к тому или иному термину словаря «Жанр».
Далее открываем раздел «ПЕРЕЗАПИСАТЬ РЕЗУЛЬТАТЫ», а в нём ставим галочку рядом с «Выводить это поле в виде ссылки». В описании данного раздела указано что путь для сылки мы должны заполнить в поле, которое находится ниже. Поэтому в поле Путь ссылки заполняем book-ganre/[nid].
Поле «Термин таксономии: Имя», является ссылкой на термин, и перебивает настройки которые мы только что делали в графе «перезаписать результаты». Для того, что бы наша работа не пошла насмарку, нам просто нужно перейти в настройки этого поля и убрать галочку с соответствующего поля.
При помощи предварительного просмотра мы можем убедиться что всё работает корректно.
После чего можно сохранять наше представление.
Заключительным этапом является вывод блока куда мы захотим. В своём случае я выведу его под самыми популярными книгами в боковой панели своей странице.
Дальнейшая тимизация блока идёт посредством CSS. Но при помощи модуля Views и его функции «агрегация» мы создали довольно таки симпатичный и информативный фильтр, который часто встречается на просторах интернет.
Забегая на перёд отмечу, что пройдя этот урок мы создали лишь блок с терминами таксаномии, а сами страницы на которые ведут эти термины мы будем создавать позже, по этому не пугайтесь если перейдя на страницу вас встретит сообщение «Страница не найдена».