我现在的情况是这样的。我正在使用 CSqlDataProvider 及其内部使用限制和偏移量的分页(页面大小)获取一些数据。之后我得到
$rawData = $sqldp->getData();
现在我需要进行一些处理并添加额外的数据。所以现在我明白了
$modRawData = modification($rawData);
现在,如果我创建一个 CArrayDataProvider 将其转换为 Dataprovider,以便我可以使用 CListView。
但是我的问题就在这里。现在我无法进行分页。如果我使用 CLinkPager 是可能的。但是有没有其他方法可以让我创建自己的 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 的潜力可以满足您的标准需求,无需太多工作,尽管在某些情况下可能需要一些额外的工作来进行过滤和排序。你可以查看它是documentation page了解更多信息。
关于php - 如何使用 CDataProvider 在 Yii 中创建我自己的 DataProvider?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23739588/