Новичек123: Блог

Главные вкладки

Фильтр во views с диапазоном от и до, где от и до задаются пользователем

12 февраля 2010 в 17:38

Долго рылся на форуме, на родном сайте друпала и вообще гугли и не нашел красивого решения поставленной задачи (может плохо искал):

Необходимо вывести во views материалы по полю От и До, ну напр. Цена От и До, где От и До задаются через форму пользователем или берутся через url или через переменную $arguments передаются, не важно, главное что views изначально не знает этих величин а получает при построениии.

Хочу поделиться своим решением, вроде легкое и без правки ядра )
1) естественно во views -> страница -> путь пишем что_то_там/% (для того ч.б. передавать аргументы из url) с галочкой Exclude the argument (ч.б. views из брал, но внимания на значения не обращал)
2) в фильтрах прописываем Cодержимое: наше_поле between 123 and 456 (числа значения не имеют, мы их заменим на нужные)
3) в самописном модуле вставляем всего одну функцию

<?phpfunction имя_модуля_views_query_alter(&$view, &$query) {
  if ($query->name == 'hot_full_search'){
    //drupal_set_message('<pre>'. print_r($view, 1).'</pre>',status);
    $query->where['0']['args']['1'] = $view->args['1'];
    $query->where['0']['args']['2'] = $view->args['2'];
    //drupal_set_message('<pre>'. print_r($query, 1).'</pre>',status);
    return $query;
  }
}  
?>

Смысл в том что аргументы берутся из views, где они уже известны и заменяют оба "левых" числа (123 и 456) в sql запросе.
Значения номеров аргументов и результат можно посмотреть, если снять комментарии.
Надеюсь пригодится.