Как изменить сортировку вида с помощью hook_views_pre_view ()? - PullRequest
2 голосов
/ 27 апреля 2010

У меня есть следующее:

function view_sorter_views_pre_view(&$view) {  // don't need $items

   if ($view->name == 'MOST_RECENT') {

        $insert = array();
        $insert[order] = 'DESC'; //SORT ORDER
        $insert[id] = 'title';
        $insert[table] = 'node';
        $insert[field] = 'title';
        $insert[override] = array();
        $insert[override][button] = 'Override';
        $insert[relationship] = 'none';

        unset ($view->display['default']->display_options['sorts']['title']);
        $view->display['default']->display_options['sorts']['title'] = $insert;

   }

} 

По сути, я просто меняю порядок сортировки ... но это не отображается в представлении при его открытии. Есть идеи почему?

1 Ответ

2 голосов
/ 27 апреля 2010

Я верю, что вы хотите

/**
 * Implementation of hook_views_pre_view().
 */
function view_sorter_views_pre_view(&$view) {
  if ($view->name == 'MOST_RECENT') {
    $view->display['default']->handler->options['sorts']['title']['order'] = 'DESC';
  }
}

Представления используют объект-обработчик для построения запроса вместо display_options. Параметры display_options содержат все параметры для каждого типа отображения, который содержит представление (например, default, page_1, block_1 и т. Д.). Объект «обработчик» содержит параметры, которые будут использоваться для фактического построения текущего отображения.

Примечание. Я упростил код, чтобы изменить только порядок сортировки. Остальная часть вашего кода должна работать, просто измените последние две строки на

unset($view->display['default']->handler->options['sorts']['title']);
$view->display['default']->handler->options['sorts']['title'] = $insert;
...