我的情况如下。我使用CSqlDataProvider及其分页(页面大小)获取一些数据,内部使用限制和偏移量。之后我得到
$ rawData = $ sqldp-> getData();
现在我需要进行一些处理并添加其他数据。所以现在我得到
$ modRawData = modification($ rawData);
现在如果我创建一个CArrayDataProvider将其转换为Dataprovider,以便我可以使用CListView。
但我的问题在这里。现在我无法做分页。如果我使用CLinkPager它可能。但是有没有其他方法可以创建我自己的DATAPROVIDER并在创建dataProvider时处理分页。
答案 0 :(得分:2)
您可以直接设置CArrayDataProvider,如下所示:
$rawData=Yii::app()->db->createCommand('SELECT * FROM table')->queryAll(); //fetches array of associative arrays representing selected rows
$dataProvider=new CArrayDataProvider($rawData, array(
'id'=>'consumer', //this is an identifier for the array data provider
'sort'=>false,
'keyField'=>'id', //this is what will be considered your key field
'pagination'=>array(
'pageSize'=>30, //eureka! you can configure your pagination from here
),
));
您现在可以在CListView或CGridView中使用$dataProvider
,例如
$this->widget('zii.widgets.grid.CGridView',array(
'id'=>'consumer-grid',
'dataProvider'=>$data,
'columns'=>array( // this array should include the attributes you want to display
'id',
'name',
'additional_column_1',
),
));
CArrayDataProvider的潜力可以匹配满足您的标准需求而无需太多工作,尽管在某些情况下可能需要一些额外的工作来进行过滤和排序。您可以查看documentation page以了解详情。
答案 1 :(得分:1)
最后我得到了答案。是的,我可以通过扩展CDataProvider来创建我的自定义DataProvider。但我只需要实现三个功能
fetchData,fetchKeys,calculateTotalItemCount
最后,您需要根据需要将自己的逻辑编写到fetchData中。