Yii CGrid pagination and sorting with CArrayDataProvider doesnt work
-
13-06-2021 - |
Question
I built a custom function in my model and return the raw data:
function(){
...
$connection=Yii::app()->db;
$command=$connection->createCommand($sql);
$rows=$command->queryAll();
return $rows;
}
$campModel = $model->function..
I then use those rows in CArrayDataProvider:
$dataProvider=new CArrayDataProvider($campModel);
Finally i'm trying to view using CGrid:
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'bo-campaigns-grid',
'dataProvider'=>$campModel,...
I'm guessing this has to do with the way CGrid is paging...but i'm lost Thanks for the help :)
Solution
Create a new CSort and CPagination objects and assign them to your dataprovider, because CArrayDataProvider doesn't have them defined. Here is an example of CSort creation:
$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';
OTHER TIPS
try this,
$this->widget('zii.widgets.grid.CGridView', array(
'id' => 'bo-campaigns-grid',
'dataProvider'=> new CArrayDataProvider($campModel, array(
'pagination' => array(
'pageSize' => 10
)
)),
...
You could also look at CSqlDataProvider. Not sure if it would give you the SQL flexibility you need, but it should handle sorting for you more easily than CArrayDataProvider
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow