xandeadx.ru Блог музицирующего веб-девелопера

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

Опубликовано в

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

Комментарии RSS

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

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании