Drupal → Необязательное одно из двух значений раскрытого фильтра с оператором BETWEEN

26.11.2015

При использовании раскрытого фильтра 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
Похожие записи

Комментарии

Михаил
15.01.2016, 10:11

При указании только одной даты условие вообще отсутствует в $condition_group. Появляется только если обе установлены.
Не знаете причину отсутствия?

Добавить комментарий