2010-04-27 3 views
2

Я получил следующее:Как изменить сортировку вида с помощью hook_views_pre_view()?

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; 

    } 

} 

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

ответ

2

Я считаю, что вы хотите

/** 
* 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. Дисплей_опции содержат все параметры для каждого типа отображения, который содержит представление (например, по умолчанию, page_1, block_1 и т. Д.). Объект «обработчик» содержит параметры, которые будут использоваться для фактического создания текущего дисплея.

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

unset($view->display['default']->handler->options['sorts']['title']); 
$view->display['default']->handler->options['sorts']['title'] = $insert; 
Смежные вопросы