Категория:
Опубликовано:

Views - контекстный фильтр по UID автора

В этом посте будет рассказано о том как пользоваться контекстными фильтрами во Views.

В частности рассмотрим пример с использованием фильтра по ID автора статьи.

Сделаем представление-блок, в котором выведем список всех статей пользователя.

По умолчанию предполагается что на сайте уже установлен и включен Views, а также создан тип содержимого Article (статья). С этими материалами и будем работать.

Создание и начальная настройка представления

Переходим на страницу создания представления (admin/structure/views/add) и добавляем новое со следующими настройками:

  • Имя представления - Материалы пользователя
  • Машинное имя - user_articles
  • Показать - Содержимое
  • Тип содержимого - Статья
  • Без меток
  • Сортировка - Новые сначала

Создадим страницу:

  • Заголовок страницы - Материалы пользователя
  • Путь - указываем user/%/articles. Таким образом можно настроить вывод для каждого пользователя.
  • Формат отображения - Неформатированный список
  • Состоящий из тизеров со ссылками и без комментариев.
  • Выведем 10 элементов для отображения
  • И отметим "Использовать постраничную навигацию"

И добавим наш блок:

  • Заголовок блока - Материалы пользователя
  • Формат отображения - Неформатированный список
  • Выведем заголовки
  • На странице будет 5 элементов без постраничной навигации

Сохраняем представление и переходим к его настройке. Скриншот настроек представления.

Настройки контекстного фильтра по ID пользователя

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

Перейдем к настройке контекстного фильтра.

Открываем блок расширенных настроек на странице и создаем контекстный фильтр:

Добавить контекстный фильтр

Находим и добавляем фильтр "Содержимое: UID Автора".

Фильтр по UID

В настройках фильтра указываем действие при отсутствии результатов "Передать значение по умолчанию" -> "ID пользователя из URL" и добавляем галку "Если есть материал, то использовать его автора".

Настройка фильтра по UID

Сохраняем фильтр. Скрин настроек.

Настройка блока

Переходим к настройке блока.

Настроить блок

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

Ссылка Ещё

Вместо слова "ещё" пишем "Все материалы пользователя" и сохраняем представление.

Все материалы пользователя

Главное проверить чтоб блок был привязан к созданной нами странице представления.

Привязка блока

Скриншот представления.

Все. Осталось вывести блок в нужный регион, указать страницы, на которых он должен выводится. И теперь при просмотре статей будет выводится блок с 5-ю материалами автора, и ссылкой на страницу со всеми его материалами.

Если у Вас возникли вопросы, замечания, предложения или просто благодарность - пишите в комментариях.
Делитесь полезными материалами в социальных сетях.

Комментарии

Подскажите пожалуйста, как правильно настроить фильтры: есть поле дата (начала/конца),нужно отображать материалы у которых: начала<= сейчас =>конца, и все даты сравнивать без учета года, чтоб например материал выводился какждый декабрь.

Нужен не контекстный фильтр, а обычный.

Так и добавляйте: 1 фильтр по дате "конечная дата >= now" и 1 фильтр "начальная дата ".

Для того чтоб выводить в определенный месяц - делайте проверку в фильтре по дате (PHP Date).

Спасибо

В фильтрах вьюс есть "Содержимое: Месяц создания" а для термина таксономии я такого не вижу. Может я какой то модуль не включил?

Для таксономии дата не так уж важна, потому к ней нет доступа, по умолчанию.

Нужного функционала можно добиться установив модуль Taxonomy Creation Date.

Спасибо, модуль сохраню, но спрашивал я про другое: почему во вьюс я не вижу возможности вставить в фильтр(вывести) любую дату(значение поля дата) в формате 'dm' , а такая возможность есть для даты создания содержимого? Может нужно включить какой-то модуль (date_all_day; date_repeat; date_tools и тд)? И тогда не понадобится использовать : "Для того чтоб выводить в определенный месяц - делайте проверку в фильтре по дате (PHP Date)."?

Совсем не понятна задача.

Объясните в деталях, что нужно выводить в зависимости от месяца? Где и чем это должно выводится? Кто и как устанавливает месяц для вывода? И т.п.

Если просто вьюху в конкретный месяц, то проще всего её сделать блоком без всяких фильтров, и в настройках его видимости (Показывать блок на определенных страницах) установить условие "Если введённый PHP-код возвращает значение TRUE" и выполнить проверку, что-нибудь типа этого:

<?php 
$mon = date('n');
if($mon == 10){
return TRUE;
}
else{
return FALSE;
}
?>

Где "10" - порядковый номер месяца.

Описание задачи:
У типов материалов статья, страница, документы и тд (не всех) есть поле словарь таксономии "период" в котором 5 терминов : каждый термин должен быть ассоциирован с периодом. Don'actions (01,01-31,03) , Printemps de la solidarité mondiale (01,04-15,05), Vacances (16,05-31,08), Pauvreté - précarité (01,09-15,10), Pères Noël Verts16,10-31,12). Пользователь при создании материала может оставить поле пустым или выбрать один из терминов. Условия вывода материала: 1) материал опубликован; И {2) поле "период пустое" ИЛИ 3) дата "сегодня" находится между датами термина.}
Для этого у терминов я создал поле дата начала дата окончания. но эти поля создаются с годом. то есть такой фильтр сработает один раз, а необходимо ежегодное повторение. Но можно в поле термина задать текстовые или целочисленные значения периодов (например 1015-15 ноября)...
Некоторые материал выводятся через вьюс, там я хотел установить фильтры описанные ранее. Некоторые выводятся на главную, там я пока не предполагаю как фильтровать. И еще в эти даты должно меняться оформление темы (только backgraund image)!!!
И еще хотелось выбрать такой вариант работающий наиболее быстро (а то сайт тормозит, а еще половины модулей не установил), и понятный пользователю (чтоб люди могли менять настройки с минимальными знаниями программирования)...
Спасибо за помощь.

В модуле Date есть подмодули Date Repeat API и Date Repeat Field, с их помощью можно делать повторяющиеся даты для отображения в следующих годах. Date Views - интегрирует даты с представлениями.

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

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

Тут следует понимать логику и назначение модуля Date. Он добавляет поля с датами. Дата это конкретное значение времени. То что нужно Вам - скорее диапазон "от-до". Его в принципе можно получить из даты и сравнить с текущей, но тут уже нужно дополнительно кодировать.

В фильтре вьюс можно сравнить значение поля Дата с "относительной датой" (например 'today' или 'now'). Возможно ли задать "относительную дату" без учета года или с фиксированным годом (чтоб вместо 2015-10-27 было 10-27 или 0000-10-27)?

Опять призываю Вас понять логику!

Дата без года - не является датой.

"Из коробки", Вы не сможете делать подобное сравнение. Нужно вытаскивать дату, выводить её строкой в формате "m-d" и сравнивать строки между собой.

Но это сравнение строк, а не дат.