2010/04/18

動態改變 Views (2.x) 的排序方式

Views 2.x 要改變排序方式的方式跟 1.x 差不多,最大的差異是設定上要繫結 views_handler 的物件,處理上比較麻煩。


底下假設目前排序方式是依據 "Post date" desc,而我們想要在傳遞任意的一個參數,改變其排序順序為根據 "type" asc, "Post date" desc,即插入一個 "type" asc 條件在原先的 "Post date" desc 之前。



  1. 插入一個 Global:Null 的 Argument

  2. Validator options 中的 Validator 設定為 PHP Code

  3. PHP validate code 中填入:



  4. $sort = views_get_handler('node', 'type', 'sort');
    $options = array(
    'order' => 'ASC',
    'id' => 'type',
    'table'=> 'node',
    'field'=>'type',
    'relationship'=>'none',
    );

    array_unshift($view->sort, $sort);
    $sort->init($view, $options);

    return true;



  5. 按下 Update 按鈕

  6. 之後便可在 Live Preview 檢視結果~


views_get_hander 的三個參數為:



  1. 表格名稱

  2. 欄位名稱

  3. handler 種類:sort, field, argument, filter, relationship


$options 的內容,可以建立一個你想要的排序條件,然後 dpm($view->sort) 來觀察~