рУССКИЙ
ИДИ НАХУЙ

Представим, что у нас есть поле, формат число с точкой. Пусть убдет 2 знаак после точки.
На странице с фильтрами нужно, когда пользователь вводит не целое число, нужно искать по всему диапазону целой части числа.

Стандартными средставим вьюхи это можно сделать с фильтрам от и до. Но у нас только одно поле.
Для решения данной проблемы можно использовать hook_views_query_alter.
Допустим у нас уже есть вьюха. Для работы нашего хука нужно присвоить вьюхе уникальный тег, чтоб мы смогли ее вычислить. mymodule_query в этом примере

function mymodule_fix_views_query_alter(&$view, &$query){
  $fields = array('field_data_field_diameter.field_diameter_value');
  if (!empty($query->options) && !empty($query->options['query_tags']) && in_array('mymodule_query', $query->options['query_tags'])) {
    foreach ($query->where as $ckey1 => &$cond_key) {
      foreach ($cond_key['conditions'] as $ckey => &$condition) {
        if (in_array($condition['field'], $fields)) {
          $value = $condition['value'];
          $value_start = (int) $value;
          $value_end = $value_start + 1;

          $condition['value'] = $value_start;
          $condition['operator'] = '>=';

          $condition_new = array();
          $condition_new['field'] = $condition['field'];
          $condition_new['value'] = $value_end;
          $condition_new['operator'] = '<';
          $query->where[$ckey1]['conditions'][] = $condition_new;
        }
      }
    }
  }
}

 

$fields – это массив с филдами, в которых нужно поменять алгоритм выборки.

Далее, если тег совпадает и в запросе есть опции – применяем подмены и добавления значений.

Таким образом, если пользователь будет вводить в поле 6.7, то наш алгоритм будет искать филды в диапазоне от 6 до 7 (не включительно).

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

Содержимое данного поля является приватным и не предназначено для показа.
  • HTML-теги не обрабатываются и показываются как обычный текст
 oooooooooo.   ooooooooooooo   oooooooooooo              oooo         .o8  
`888' `Y8b 8' 888 `8 d'""""""d888' `888 "888
888 888 888 .888P oooooooo 888 .oooo888
888oooo888' 888 d888' d'""7d8P 888 d88' `888
888 `88b 888 .888P .d8P' 888 888 888
888 .88P 888 d888' .P .d8P' .P 888 888 888
o888bood8P' o888o .8888888888P d8888888P o888o `Y8bod88P"


Введите код, изображенный в стиле ASCII-арт.
рУССКИЙ
ИДИ НАХУЙ