Profile picture for user admin_romcom

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

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

The content of this field is kept private and will not be shown publicly.
  • No HTML tags allowed.
  o-o   o---o  o   o  o-O-o   o-o  
o o / |\ | | o o
| | o | \ | | | |
o O | | \| | o O
o-O\ o o o o-O-o o-O\

Enter the code depicted in ASCII art style.