Контекстные фильтры и связи Views Drupal
В этом уроке мы рассмотрим работу с контекстными фильтрами и связями.
У типа материалов Фильм есть поле В ролях. Это поле типа Entity Reference ссылающееся на типа материалов Роль.
Если мы перейдем на страницу любого фильма, то увидим, что актеры, которых мы добавили в поле В ролях,выводятся как простой список.

С помощью модуля Views (Представления) мы сделаем отображение актеров более интересным.
Для начала скроем стандартный вывод поля В ролях. Переходим на страницу управления отображением полей для типа материалов Фильм.

Переместим поле В ролях в секцию Скрытый и сохраним настройки.

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

Назовем новое представление Актёры (машинное имя actors). В поле Показать выберем Содержимое типа Актёр.

Снимаем галочку напротив Создать страницу, так как страничное отображение нам не нужно, а вместо этого поставим галочку напротив Создать блок. Задаем заголовок блока В ролях: и выбираем формат отображения Сетка. Нажимаем Продолжить редактирование.
Теперь, если мы взглянем на предпросмотр блока, то увидим имена актеров выведенных в виде сетки.

Добавим поле Фото и еще раз взглянем на предпросмотр. Блок теперь выглядит значительно лучше.

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

Нажимаем на кнопку Добавить в секции Связи.

В открывшемся всплывающем окне добавляем связь Entity Reference: Связанная сущность. В описании этой связи написано, что ссылаться на Содержимое она будет через поле field_roles, что нам и требовалось.

Далее мы меняем стандартный Идентификатор на более понятный — Исполнитель роли.

Также необходимо поставить галочку Эта связь обязательна так как нам нужны только те актеры, которые привязаны к фильму. Нажимаем кнопку Применить (все отображения).

Теперь, когда связь с типом материалов Фильм установлена, пришло время добавить контекстный фильтр с помощью которого будут отфильтровываться актеры для каждого конкретного фильма.
Нажимаем на кнопку Добавить в секции Контекстные фильтры.

Находим и добавляем контекстный фильтр Содержимое: Nid и нажимаем кнопку Применить (все отображения).

Далее нам предлагается настроить этот фильтр. В поле Связь выберем ранее добавленную нами связь Исполнитель роли. Этим мы показываем, что ,в качестве аргумента для фильтрации, мы принимаем именно идентификатор фильма, а не актера.
В секции Когда значение фильтра не доступно выбираем пункт Передать значение по умолчанию и в поле Тип выбираем ID материала из URL. Это значит что, когда мы будем заходить на страницу фильма, его идентификатор (NID) будет передаваться в представление и по нему будут отбираться только те актеры, которые указаны в поле В ролях.
Нажимаем Применить (все отображения).

Сохраняем представление.
Переходим в раздел Блоки.

Перемещаем блок В ролях в регион First sidebar (Первая боковая панель).

Нажимаем кнопку Сохранить блоки, чтобы закрепить позицию блока и переходим к настройке блока В ролях.

В секции Настройки видимости выберем Тип материалов — Фильм, чтобы блок отображался только на странице фильма. Нажимаем Сохранить настройки.

Переходим на страницу фильма Пятый элемент. В блок В ролях действительно выводятся актеры сыгравшие роль в этом фильме. Значит представление работает правильно. Осталось только немного подправить внешний вид.

Переходим на страницу редактирования представления и нажимаем на ссылку редактирования настроек формата отображения Сетка.

Изменяем число столбцов на 2 и нажимаем Применить (все отображения).

Также изменим стиль изображения для поля Фото на Thumbnail (100×100) (как это делать мы уже рассматривали). Сохраняем представление и переходим обратно на страницу фильма.
Теперь блок В ролях выглядит гораздо лучше.

Посмотрим еще один пример страницы фильма.

В этом уроке мы рассмотрели пример работы с контекстными фильтрами и связями. В следующем уроке мы разберем такое понятие как агрегация.
Источник: http://drupal-learning.com

