Контекстные фильтры и связи Views Drupal
В этом уроке мы рассмотрим работу с контекстными фильтрами и связями.
У типа материалов Фильм есть поле В ролях. Это поле типа Entity Reference ссылающееся на типа материалов Роль.
Если мы перейдем на страницу любого фильма, то увидим, что актеры, которых мы добавили в поле В ролях,выводятся как простой список.
С помощью модуля Views (Представления) мы сделаем отображение актеров более интересным.
Для начала скроем стандартный вывод поля В ролях. Переходим на страницу управления отображением полей для типа материалов Фильм.
Переместим поле В ролях в секцию Скрытый и сохраним настройки.
Теперь перейдем в раздел Представления и нажмем на ссылку Добавить новое представление.
Назовем новое представление Актёры (машинное имя actors). В поле Показать выберем Содержимое типа Актёр.
Снимаем галочку напротив Создать страницу, так как страничное отображение нам не нужно, а вместо этого поставим галочку напротив Создать блок. Задаем заголовок блока В ролях: и выбираем формат отображения Сетка. Нажимаем Продолжить редактирование.
Теперь, если мы взглянем на предпросмотр блока, то увидим имена актеров выведенных в виде сетки.
Добавим поле Фото и еще раз взглянем на предпросмотр. Блок теперь выглядит значительно лучше.
Как мы видим в отображение выводятся все актёры, а нам нужно сделать так чтобы выводились актёры для каждого конкретного фильма. Для этого первым делом нужно добавить связь с типом материалов Фильм по полю В ролях.
Разворачиваем блок расширенных настроек.
Нажимаем на кнопку Добавить в секции Связи.
В открывшемся всплывающем окне добавляем связь Entity Reference: Связанная сущность. В описании этой связи написано, что ссылаться на Содержимое она будет через поле field_roles, что нам и требовалось.
Далее мы меняем стандартный Идентификатор на более понятный — Исполнитель роли.
Также необходимо поставить галочку Эта связь обязательна так как нам нужны только те актеры, которые привязаны к фильму. Нажимаем кнопку Применить (все отображения).
Теперь, когда связь с типом материалов Фильм установлена, пришло время добавить контекстный фильтр с помощью которого будут отфильтровываться актеры для каждого конкретного фильма.
Нажимаем на кнопку Добавить в секции Контекстные фильтры.
Находим и добавляем контекстный фильтр Содержимое: Nid и нажимаем кнопку Применить (все отображения).
Далее нам предлагается настроить этот фильтр. В поле Связь выберем ранее добавленную нами связь Исполнитель роли. Этим мы показываем, что ,в качестве аргумента для фильтрации, мы принимаем именно идентификатор фильма, а не актера.
В секции Когда значение фильтра не доступно выбираем пункт Передать значение по умолчанию и в поле Тип выбираем ID материала из URL. Это значит что, когда мы будем заходить на страницу фильма, его идентификатор (NID) будет передаваться в представление и по нему будут отбираться только те актеры, которые указаны в поле В ролях.
Нажимаем Применить (все отображения).
Сохраняем представление.
Переходим в раздел Блоки.
Перемещаем блок В ролях в регион First sidebar (Первая боковая панель).
Нажимаем кнопку Сохранить блоки, чтобы закрепить позицию блока и переходим к настройке блока В ролях.
В секции Настройки видимости выберем Тип материалов — Фильм, чтобы блок отображался только на странице фильма. Нажимаем Сохранить настройки.
Переходим на страницу фильма Пятый элемент. В блок В ролях действительно выводятся актеры сыгравшие роль в этом фильме. Значит представление работает правильно. Осталось только немного подправить внешний вид.
Переходим на страницу редактирования представления и нажимаем на ссылку редактирования настроек формата отображения Сетка.
Изменяем число столбцов на 2 и нажимаем Применить (все отображения).
Также изменим стиль изображения для поля Фото на Thumbnail (100×100) (как это делать мы уже рассматривали). Сохраняем представление и переходим обратно на страницу фильма.
Теперь блок В ролях выглядит гораздо лучше.
Посмотрим еще один пример страницы фильма.
В этом уроке мы рассмотрели пример работы с контекстными фильтрами и связями. В следующем уроке мы разберем такое понятие как агрегация.
Источник: http://drupal-learning.com