Постановка задачи
На Drupal-сайте имеется view, выводящее ноды, отсортированные по дате публикации. Во вьюшке настроен раскрытый фильтр по одному из полей. Необходимо в случае, если введено значение раскрытого фильтра, выводить ноды, отсортированные уже по этому фильтру.
Решение
Рассмотрим решение задачи на примере вьюшки-каталога с раскрытым фильтром по полю цены товара с машинным именем field_price (например, «Цена, до» или «Цена, от»). Нам понадобится изменить запрос во view с помощью хука hook_views_query_alter(). Имплементировав хук в своем модуле, изменяем критерий сортировки следующим образом:
/**
* Implements hook_views_query_alter().
*/
function my_views_views_query_alter(&$view, &$query) {
if ($view->name == 'catalog') {
if ($view->exposed_data['field_price_value']) {
$query->orderby[0]['field'] = 'field_price_value';
$query->orderby[0]['direction'] = 'DESC';
}
}
}
В данном примере сортировка осуществляется по убыванию цены, если бы необходимо было выводить товары по возрастанию цены, в параметре direction критерия сортировки мы бы указали ASC. Очевидно, что задачу можно решить и в случае использования нескольких раскрытых фильтров в представлении.