Views выборка по числу с запятой

Представим, что у нас есть поле, формат число с точкой. Пусть убдет 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 (не включительно).

Комментарии

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