我的情况是这样的。我正在使用CSqlDataProvider及其分页(页面大小)获取一些数据,其内部使用限制和偏移量。然后是
$rawData = $sqldp->getData();
现在我需要做一些处理和添加额外的数据。现在我得到
$modRawData = modify ($rawData);
现在,如果我创建一个CArrayDataProvider转换成一个数据提供者,这样我就可以使用CListView。
但是我的问题在这里。现在我无法执行分页操作。如果我使用clinkager,这是可能的。但是,是否有其他方法可以让我创建自己的DATAPROVIDER并在创建DATAPROVIDER时处理分页
您可以直接创建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的潜力可以匹配满足您的标准需求,而不需要太多的工作,尽管在某些情况下可能需要一些额外的过滤和排序工作。
我终于得到了答案。是的,我可以通过扩展CDataProvider来创建我的自定义数据提供者。但是我只需要实现三个函数
fetchData, fetchKeys, calculateTotalItemCount
最后你需要写你自己的逻辑到fetchData你想要的