Views - контекстный фильтр по UID автора
В этом посте будет рассказано о том как пользоваться контекстными фильтрами во Views.
В частности рассмотрим пример с использованием фильтра по ID автора статьи.
Сделаем представление-блок, в котором выведем список всех статей пользователя.
По умолчанию предполагается что на сайте уже установлен и включен Views, а также создан тип содержимого Article (статья). С этими материалами и будем работать.
Создание и начальная настройка представления
Переходим на страницу создания представления (admin/structure/views/add) и добавляем новое со следующими настройками:
- Имя представления - Материалы пользователя
- Машинное имя - user_articles
- Показать - Содержимое
- Тип содержимого - Статья
- Без меток
- Сортировка - Новые сначала
Создадим страницу:
- Заголовок страницы - Материалы пользователя
- Путь - указываем user/%/articles. Таким образом можно настроить вывод для каждого пользователя.
- Формат отображения - Неформатированный список
- Состоящий из тизеров со ссылками и без комментариев.
- Выведем 10 элементов для отображения
- И отметим "Использовать постраничную навигацию"
И добавим наш блок:
- Заголовок блока - Материалы пользователя
- Формат отображения - Неформатированный список
- Выведем заголовки
- На странице будет 5 элементов без постраничной навигации
Сохраняем представление и переходим к его настройке. Скриншот настроек представления.
Настройки контекстного фильтра по ID пользователя
При создании представления были внесены все нужные настройки и менять или добавлять что-либо не обязательно.
Перейдем к настройке контекстного фильтра.
Открываем блок расширенных настроек на странице и создаем контекстный фильтр:
Находим и добавляем фильтр "Содержимое: UID Автора".
В настройках фильтра указываем действие при отсутствии результатов "Передать значение по умолчанию" -> "ID пользователя из URL" и добавляем галку "Если есть материал, то использовать его автора".
Сохраняем фильтр. Скрин настроек.
Настройка блока
Переходим к настройке блока.
Здесь нужно лишь добавить ссылку на страницу со всеми материалами пользователя:
Вместо слова "ещё" пишем "Все материалы пользователя" и сохраняем представление.
Главное проверить чтоб блок был привязан к созданной нами странице представления.
Все. Осталось вывести блок в нужный регион, указать страницы, на которых он должен выводится. И теперь при просмотре статей будет выводится блок с 5-ю материалами автора, и ссылкой на страницу со всеми его материалами.
Комментарии
Подскажите пожалуйста, как правильно настроить фильтры: есть поле дата (начала/конца),нужно отображать материалы у которых: начала<= сейчас =>конца, и все даты сравнивать без учета года, чтоб например материал выводился какждый декабрь.
Нужен не контекстный фильтр, а обычный.
Так и добавляйте: 1 фильтр по дате "конечная дата >= now" и 1 фильтр "начальная дата ".
Для того чтоб выводить в определенный месяц - делайте проверку в фильтре по дате (PHP Date).
Спасибо
В фильтрах вьюс есть "Содержимое: Месяц создания" а для термина таксономии я такого не вижу. Может я какой то модуль не включил?
Для таксономии дата не так уж важна, потому к ней нет доступа, по умолчанию.
Нужного функционала можно добиться установив модуль Taxonomy Creation Date.
Спасибо, модуль сохраню, но спрашивал я про другое: почему во вьюс я не вижу возможности вставить в фильтр(вывести) любую дату(значение поля дата) в формате 'dm' , а такая возможность есть для даты создания содержимого? Может нужно включить какой-то модуль (date_all_day; date_repeat; date_tools и тд)? И тогда не понадобится использовать : "Для того чтоб выводить в определенный месяц - делайте проверку в фильтре по дате (PHP Date)."?
Совсем не понятна задача.
Объясните в деталях, что нужно выводить в зависимости от месяца? Где и чем это должно выводится? Кто и как устанавливает месяц для вывода? И т.п.
Если просто вьюху в конкретный месяц, то проще всего её сделать блоком без всяких фильтров, и в настройках его видимости (Показывать блок на определенных страницах) установить условие "Если введённый PHP-код возвращает значение TRUE" и выполнить проверку, что-нибудь типа этого:
Где "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" и сравнивать строки между собой.
Но это сравнение строк, а не дат.