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