Фильтр по дате создания нод в виде выпадающего меню - как сделать?

Главные вкладки

Аватар пользователя Alandr Alandr 13 сентября 2012 в 19:30

Добрый день.

Необходимо сделать с помощью Views вывод списка нод за определенный промежуток времени, выбираемый юзером из выпадающего меню.

Т.е., юзер видит на странице выпадающее меню со списком годов (2012, 2011, 2010,...). При выборе какого-либо года он должен получить ноды, которые были созданы в данном году. Например, при выборе "2011" ему должны быть выданы все ноды, созданные в промежутке 1.01.2011 - 31.12.2011.

Если сделать фильтр "Материал: Дата создания", раскрыть его и указать оператор "между", то появятся два текстовых поля, но это не то, что мне надо. Необходимо именно выпадающее меню, и только с цифрой года.

Никак не могу сообразить, как это сделать. Просмотрел список тем на drupal.ru по тегу 'exposed filters', но не нашел ничего подходящего.

Помогите, пожалуйста. Спасибо.

Комментарии

Аватар пользователя EvgenySorokin EvgenySorokin 13 сентября 2012 в 20:09

Можно использовать таксономию. Но придется ноды редактировать и задавать термины, это не самый быстрый вариант.

Аватар пользователя Alandr Alandr 13 сентября 2012 в 22:06

Спасибо за советы, но я уже разобрался и сделал по-другому, а именно:

Аргументы > Материал: Год создания > Сводка, сортировка по убыванию > Стиль: Меню перехода

Но если кто-нибудь подскажет, как сделать так, чтобы при отображении списка нод за конкретный год не исчезало это самое меню со списком годов - буду признателен!

Аватар пользователя dwizhok-ok dwizhok-ok 24 ноября 2013 в 21:30

Alandr wrote:
Спасибо за советы, но я уже разобрался и сделал по-другому, а именно:

Аргументы > Материал: Год создания > Сводка, сортировка по убыванию > Стиль: Меню перехода

Но если кто-нибудь подскажет, как сделать так, чтобы при отображении списка нод за конкретный год не исчезало это самое меню со списком годов - буду признателен!

Всё верно сделал просто кое что упустил. Вот 100% рабочее решение, как реализовал всё я на семёрке:
Создаём новое представление. Показать -> Содержимое, указываем необходимый для фильтрации тип материала, сортировка -> самые новые вначале, галочка на Создать страницу, придумываем путь, формат отображения по умолчанию, ниже по желанию, создание блока нам не потребуется. Жмём "продолжить и редактировать". Теперь только добавляем контекстный фильтр "Год создания". В нём выбираем "Показать итог" -> порядок по желанию, сортировка по дате, формат меню перехода. Можно поставить галку на "Hide the "Go" button" это сделает переход без кнопки. Применяем и сохраняем.
Последний штрих. Вставляем код созданного вия <?php print views_embed_view('god');?> в page.tpl.php, в нужное нам место, у меня это например левая колонка сайта, вправой сам контент. В коде вия «god» - это машинное имя моего представления
Результат фильтр года всегда на месте! Успехов друзья!
З.Ы путь-ссылку представления можно сделать одинаковой с категорией вашего каталога, страницы новостей, блога и.т.п вообщем с той страничкой на которой будет стоять фильтр

Аватар пользователя roman-yrv roman-yrv 14 сентября 2012 в 10:59

А если это сделать на более низком уровне ?

То есть, с помощью Views сформировать SQL-запрос, чобы иметь представление, как он выглядит.

Затем в каком-нибудь текущем или новом модуле переопределить hook_menu, чтобы там определить ссылки типа "http://site.ru/show-nodes/год", где год - цифра года.
Ну и соответственно, нужно будет определить функцию, которая будет формировать страницу с выходной информацией - там можно формировать как список с годами, так и выборку нод.

А сам список нод можно сформировать вручную с помощью команд $query=db_select ... им т.д. (сам запрос можно взять из вышеуказанного views ).
В этом случае можно обеспечить большую гибкость, чем при использовании views.

Конечно, здесь работы будет несколько побольше, чем при использовании views, зато можно будет пользоваться напрямую возможностями php и mysql.

И в случае чего эту задачу будет проще дорабатывать.
Например, если в списке понадобится выводить не год, а год+месяц ("2012, январь") или год и квартал ("2012, I квартал").