Вы здесь

Как сделать раскрытый фильтр Views по дате создания ноды?

0

Доброго времени суток, уважаемые гуру! Столкнулся с интересным поведением раскрытого фильтра Views по полю типа "Дата" в Drupal 8. Задача банальная: вывести ноды, созданные в определенный день. Для этого делаю обычный раскрытый фильтр по полю "Время создания", вешаю на него DatePicker - все отображается прекрасно, но какие бы значения и в каком бы виде я в него не передавал, в результате он ничего не выводит :( Дабы разобраться в причине такого поведения, добавил реализацию views_query_alter() и вывел в нем $query->where. Оказалось, что дата из фильтра передается туда успешно, но в самом запросе она представлена в виде UNIX Timestamp и проверяется на равенство полю node_field_data.created. Получается, если я запрашиваю в фильтре дату 15.05.2017, при преобразовании в UNIX timestamp она будет соответствовать ровно 15 мая 2017 года 0 часов 0 минут и 0 секунд. И если нода создана 15 мая 2017 года в 0 часов 1 минуту, то она уже не попадает под это условие. Я вышел из ситуации, изменив запрос следующим образом:

unset($query->where[1]["conditions"][2]);
    $group = $query->setWhereGroup($type = 'AND');
    $query->addWhereExpression($group, "node_field_data.created >= '".strtotime($_GET['created'])."' and node_field_data.created < '".strtotime('+1 day', strtotime($_GET['created']))."'");

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

Версия Drupal: 
8.x
Связанные проекты: 
Views
Вопрос задан 17.05.2017 - 22:03
Аватар пользователя Tim
Tim
0

Ответы