При использовании раскрытого фильтра Views с оператором Between (Между) нужно заполнять оба значения фильтра — и минимум и максимум, при этом нет возможности оставить одно значение пустым, чтобы Views автоматически превратил value BETWEEN min AND max
в value >= min
или value <= max
.
Можно написать свой filter handler, но его придётся прописывать каждому полю самостоятельно.
Второй вариант, более универсальный:
1. В настройках запроса нужного Views прописать тег optional_between
:
2. Реализовать хук hook_views_query_alter
:
/**
* Implements hook_views_query_alter().
*/
function MODULENAME_views_query_alter(&$view, &$query) {
if (in_array('optional_between', $query->options['query_tags'])) {
foreach ($query->where as &$condition_group) {
foreach ($condition_group['conditions'] as &$condition) {
if ($condition['operator'] == 'BETWEEN') {
if ($condition['value'][0] === '') {
$condition['operator'] = '<=';
$condition['value'] = $condition['value'][1];
}
elseif ($condition['value'][1] === '') {
$condition['operator'] = '>=';
$condition['value'] = $condition['value'][0];
}
}
}
}
}
}
Написанное актуально для
Views 3
Комментарии
При указании только одной даты условие вообще отсутствует в $condition_group. Появляется только если обе установлены.
Не знаете причину отсутствия?
Добавить комментарий