Критерий фильтрации - сравнение двух дат в представлении

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

Аватар пользователя vert4 vert4 16 августа 2018 в 16:09

День добрый!

Есть представление с двумя датами.

Дата подачи заявления и дата рассмотрения заявления.

Нужно было поставить фильтр вывода, как мне казалось простой фильтр, сравнение по датам заявления и проверки. Если дата заявления больше даты проверки то строка представления выводится, если меньше или равно дате проверки, то строка не выводится (заявление проверили и дата проверки не может быть меньше даты отправки заявления).

Выбрал фильтр сравнение полей и выбрал эти два поля с датами для сравнения, но.... фильтр не работает.

Кто может сказать почему? Как можно другим способом сравнить эти два поля с датами?

Спасибо

Лучший ответ

Аватар пользователя vert4 vert4 23 августа 2018 в 15:04

Разобрался со своим вопросом. Как и предполагал проблема была в том, что даты были в разных форматах в БД. Одна дата записывалась в поле INT 11, другая дата DATETIME. Привел обе даты к общему стандарту timestamp и условие сравнение дат заработало. К сожалению без php фильтра не обошлось. Что не есть хорошо.
Все спасибо за помощь.

Комментарии

Аватар пользователя vert4 vert4 17 августа 2018 в 11:58

views_php у меня стоит. Для использования php в фильтре он пишет строка не будет выводиться, если введенный код возвращает true
вот я попробовал такую конструкцию

$start_value = $row->submitted; // дата подачи заявления
$end_value = $row->field_user_checked; // дата проверки заявления
if ( $end_value > $start_value ) {
return TRUE;
}

И не отрабатывает во вьюс выводит все заявления без проверки условия, если изменить сравнение на
$end_value < $start_value , что в моей логике вывода данных не правильно, то вьюс вообще пустой открывается, хотя есть записи подходящие к критерию фильтра.

Аватар пользователя vert4 vert4 17 августа 2018 в 12:43

Переменную не правильно вывожу. Решил просто добавить новое поле во вьюс что бы проверить как выводится дата $row->submitted и ничего не вывелось и достучаться до значения не получилось. Пробовал и так

$date = $row->submitted['value'];
$date1 = strtotime($date);
print $date1;

В этом я думаю и ошибка - правильно вытянуть дату...

Аватар пользователя charOFF charOFF 17 августа 2018 в 14:48
1

Насколько я знаю, проблема в модуле views_php. $row->field_user_checked вместо значения поля возвращает nid. Можете проверить это, внутри кода фильтра добавить dpm($row->field_user_checked) если devel включен. Проблема обсуждалась здесь https://www.drupal.org/project/views_php/issues/1140896
Можно конечно взять значение поля из ноды, но грузить ноду в фильтре глупо. Так что можно через views_api делать, как предлагали выше. Или может добавить computed_field "Заявка рассмотрена" в заявку и при сохранении сравнивать даты, проверять рассмотрена заявка или нет. Так и вьюс будет работать быстрее.

Аватар пользователя vert4 vert4 23 августа 2018 в 15:04

Разобрался со своим вопросом. Как и предполагал проблема была в том, что даты были в разных форматах в БД. Одна дата записывалась в поле INT 11, другая дата DATETIME. Привел обе даты к общему стандарту timestamp и условие сравнение дат заработало. К сожалению без php фильтра не обошлось. Что не есть хорошо.
Все спасибо за помощь.