Yii CArrayDataProvider对所有列进行排序

时间:2014-04-09 22:54:55

标签: php yii cgridview gridview-sorting

您好我想为CGridView中的所有字段设置排序,而不必手动将其写下来。有什么想法吗?

$this->widget('application.widgets.GridView', array(
                'dataProvider'=>new CArrayDataProvider($offers,array(
                    'sort'=>array(
                        'attributes'=> 'AUTOMATICALLY TAKE ALL',
                    ),
                    'pagination'=>array(
                            'pageSize'=>10,
                        ),
                    )
                ),
                'enableSorting'=>true,
                ...

现在我必须编写我要排序的所有列(=属性)。但我只想要在网格中定义的所有内容。

2 个答案:

答案 0 :(得分:3)

您不需要星号功能,因为您可以使用数组中的键:

$this->widget('application.widgets.GridView', array(
                    'dataProvider'=>new CArrayDataProvider($offers,array(
                        'sort'=>array(
                            'attributes'=> array_keys($offers[0]),
                        ),  
                        ...

答案 1 :(得分:0)

它应仅适用于CActiveDataProvider,请参阅CSort.php source code,方法resolveAttribute。

public function resolveAttribute($attribute)
{
    if($this->attributes!==array())
        $attributes=$this->attributes;
    elseif($this->modelClass!==null)
        $attributes=$this->getModel($this->modelClass)->attributeNames();
    else
        return false;
    foreach($attributes as $name=>$definition)
    {
        if(is_string($name))
        {
            if($name===$attribute)
                return $definition;
        }
        elseif($definition==='*')
        {
            if($this->modelClass!==null && $this->getModel($this->modelClass)->hasAttribute($attribute))
                return $attribute;
        }
        elseif($definition===$attribute)
            return $attribute;
    }
    return false;
}