2010-04-27 2 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의 쿼리를 작성하는 핸들러 객체를 사용 믿습니다. display_options는보기에 포함 된 모든 디스플레이 유형 (예 : default, page_1, block_1 등)에 대한 모든 옵션을 포함합니다. 'handler'객체는 현재 디스플레이를 빌드하는 데 사용될 옵션을 가지고 있습니다.

참고 : 코드를 단순화하여 정렬 순서 만 변경했습니다. 나머지 코드는 올바르게 작동합니다. 마지막 두 줄만 변경하면

unset($view->display['default']->handler->options['sorts']['title']); 
$view->display['default']->handler->options['sorts']['title'] = $insert; 
관련 문제