Разбиение на страницы и сортировка Yii CGrid с помощью CArrayDataProvider не работает

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

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

$campModel = $model->функция..

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

$dataProvider=new CArrayDataProvider($campModel);

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

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

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


person Danny Valariola    schedule 08.06.2012    source источник
comment
Если вы собираетесь использовать CArrayDataProvider, вам необходимо специально настроить объекты CPagination и Csort в его свойствах «sort» и «pagination» соответственно.   -  person sucotronic    schedule 08.06.2012
comment
Я думаю, что это так... не могли бы вы привести пример?   -  person Danny Valariola    schedule 08.06.2012
comment
другим способом будет использование CActiveDataProvider   -  person Orlymee    schedule 08.06.2012


Ответы (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';
person sucotronic    schedule 08.06.2012
comment
Спасибо... Я думаю, это прибило его :) - person Danny Valariola; 09.06.2012
comment
Большое спасибо за полезное предложение. Вот вопрос: возможно ли, чтобы действие сортировки перезагружало сетку с помощью ajax вместо перезагрузки всей страницы? - person bjtilley; 01.07.2013
comment
@bjtilley по умолчанию CGridView использует обновления ajax, если не обнаруживает, что javascript отключен. См. ссылку: yiiframework.com/doc/api/1.1/CGridView - person sucotronic; 02.07.2013

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

$this->widget('zii.widgets.grid.CGridView', array(
  'id' => 'bo-campaigns-grid',
  'dataProvider'=> new CArrayDataProvider($campModel, array(
        'pagination' => array(
            'pageSize' => 10
        )
    )),
  ...
person Alex    schedule 08.06.2012
comment
мой плохой, забыл добавить конфигурацию, чтобы указать размер подкачки. - person Alex; 08.06.2012

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

person acorncom    schedule 09.06.2012