Yii CGridView - 在列标题单击时首先按DESC排序

时间:2013-07-11 09:37:37

标签: sorting yii cgridview

是否可以更改列标题单击排序的顺序?

我有一个“排名”列,在第一次点击时会按ASC排序,只有在第二次点击时才会进入DESC排序 - 我需要将其反转,以便第一次点击是DESC,第二次点击是ASC。< / p>

这可能吗?

return new CSqlDataProvider($sql . $search, array(
            'totalItemCount' => $itemCount,
            'params' => $params,
            'sort' => array(
                'attributes' => array (
                    'enabled',
                    'store_name',
                    'rating' => array (
                        'desc' => 'rating * percent / 100 DESC',
                        'asc' => 'rating * percent / 100 ASC',
                    ),
                ),
                'defaultOrder' => array( 'store_name'=>false )
            ),
            'pagination' => array('pageSize' => Yii::app()->user->getState('pageSize_cs', Yii::app()->params['defaultPageSize']),),
        ));

3 个答案:

答案 0 :(得分:2)

我知道这样做的唯一方法是导致列箭头指向错误的黑客攻击。

'desc' => 'rating * percent / 100 ASC',
'asc' => 'rating * percent / 100 DESC',

答案 1 :(得分:1)

我认为默认情况下,如果您点击CGridView中显示的标题,如果您希望反向流程反向执行

,则会默认按降序显示ASC
   public function search($status) 
   { 
        $criteria = new CDbCriteria;    
        $criteria->order = 'store_name desc';
   }

答案 2 :(得分:0)

从Yii 1.1.3开始,为属性设置添加了default密钥支持。这完全符合你的要求。例如:

'sort' => array(
    'attributes' => array (
        'enabled',
        'store_name',
        'rating' => array (
            'desc' => 'rating * percent / 100 DESC',
            'asc' => 'rating * percent / 100 ASC',
            'default' => 'desc',
        ),
    ),
    'defaultOrder' => array( 'store_name'=>false )
),