【问题标题】:Yii CArrayDataProvider sorting all columnsYii CArrayDataProvider 对所有列进行排序
【发布时间】:2014-05-23 10:02:05
【问题描述】:

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

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

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

【问题讨论】:

    标签: php yii cgridview gridview-sorting


    【解决方案1】:

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

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

    【讨论】:

    • 这似乎是一个不错的解决方法,但是如果没有条目会发生什么?当然,如果没有条目,则不需要排序,所以只要它不抛出错误就可以了
    • 是的,它是快速破解。我更喜欢在模型中准备排序属性并从列数组中获取名称。模型中也准备了列数组。
    【解决方案2】:

    它应该只适用于 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;
    }
    

    【讨论】:

    • hm,但这对我没有帮助,因为我想使用 CArrayDataProvider.. 所以这里没有选项?
    • 是的,不可能
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    • 2014-09-07
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多