Yii CGrid нумерация страниц и сортировка с CArrayDataProvider не работает

Я построил пользовательскую функцию в моей модели и возвращаю необработанные данные:

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

$ campModel = $ model-> function..

Затем я использую эти строки в CArrayDataProvider:

$dataProvider=new CArrayDataProvider($campModel);

Наконец я пытаюсь просмотреть с помощью CGrid:

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

Я предполагаю, что это связано с тем, как CGrid выполняет пейджинг... но я заблудился. Спасибо за помощь:)

3 ответа

Решение

Создайте новые объекты 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';

Вы также можете посмотреть на CSqlDataProvider. Не уверен, что это даст вам необходимую гибкость SQL, но он должен обрабатывать сортировку для вас легче, чем CArrayDataProvider

Попробуй это,

$this->widget('zii.widgets.grid.CGridView', array(
  'id' => 'bo-campaigns-grid',
  'dataProvider'=> new CArrayDataProvider($campModel, array(
        'pagination' => array(
            'pageSize' => 10
        )
    )),
  ...
Другие вопросы по тегам