【问题标题】:Yii CGrid pagination and sorting with CArrayDataProvider doesnt workYii CGrid 分页和使用 CArrayDataProvider 排序不起作用
【发布时间】:2012-06-08 06:38:13
【问题描述】:

我在我的模型中构建了一个自定义函数并返回原始数据:

function(){
...
$connection=Yii::app()->db;
$command=$connection->createCommand($sql);
$rows=$command->queryAll();
return $rows;
}

$campModel = $model->函数..

然后我在 CArrayDataProvider 中使用这些行:

$dataProvider=new CArrayDataProvider($campModel);

最后我尝试使用 CGrid 查看:

$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'bo-campaigns-grid',
'dataProvider'=>$campModel,...

我猜这与 CGrid 的分页方式有关……但我迷路了 感谢您的帮助:)

【问题讨论】:

  • 如果您要使用 CArrayDataProvider,您需要在其各自的“排序”和“分页”属性中专门自定义 CPagination 和 Csort 对象。
  • 我认为是这样...你能举个例子吗?
  • 另一种方法是使用 CActiveDataProvider

标签: php yii yii-cmodel zii-widgets


【解决方案1】:

创建一个新的 CSort 和 CPagination 对象并将它们分配给您的数据提供者,因为 CArrayDataProvider 没有定义它们。下面是创建 CSort 的示例:

$dataProvider=new CArrayDataProvider($campModel);
$sort = new CSort();
$sort->attributes = array(
            'fecha'=>array(
                'asc'=>'dateA DESC',
                'desc'=>'dateA ASC',
            ),
);
$sort->route = 'myController/myMethod';
$dataProvider->sort = $sort;
$dataProvider->sort->defaultOrder='dateA DESC';

【讨论】:

  • 谢谢...我认为这成功了:)
  • 非常感谢您的有用建议。这里有一个问题:是否可以让排序操作使用 ajax 重新加载网格而不是重新加载整个页面?
  • @bjtiley 默认情况下 CGridView 使用 ajax 更新,除非它检测到 javascript 被禁用。见参考:yiiframework.com/doc/api/1.1/CGridView
【解决方案2】:

试试这个,

$this->widget('zii.widgets.grid.CGridView', array(
  'id' => 'bo-campaigns-grid',
  'dataProvider'=> new CArrayDataProvider($campModel, array(
        'pagination' => array(
            'pageSize' => 10
        )
    )),
  ...

【讨论】:

  • 我的错,忘记添加配置以提供分页大小。
【解决方案3】:

您还可以查看 CSqlDataProvider。不确定它是否会给您所需的 SQL 灵活性,但它应该比 CArrayDataProvider 更轻松地为您处理排序

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-23
    • 1970-01-01
    • 2015-03-09
    • 2014-02-17
    • 1970-01-01
    相关资源
    最近更新 更多