AJAX пагинация в CGridView ломает выставленный фильтр.
Действие в контроллере:
Код: Выделить всё
public function actionInfo() {
$expenses = new Expenses('search');
$expenses->unsetAttributes();
if (isset($_GET['Expenses'])) $expenses->attributes = $_GET['Expenses'];
$this->render('info', array(
'expenses' => $expenses,
));
}
Код: Выделить всё
class Expenses extends CActiveRecord
{
/* ... */
public function relations()
{
return array(
'type' => array(self::BELONGS_TO, 'ExpensesTypes', 'type_id'),
);
}
public function search()
{
$criteria=new CDbCriteria;
$criteria->compare('id',$this->id);
$criteria->compare('type_id',$this->type_id);
$criteria->with('type');
return new CActiveDataProvider($this, array(
'criteria' => $criteria
));
}
}
Код: Выделить всё
<?php
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider' => $expenses->search(),
'filter' => $expenses,
'template'=>'{summary}{pager}{items}{pager}', // чтобы и сверху была пагинация
'columns' => array(
'id',
array(
'name' => 'type_id',
'value' => '$data->type ? $data->type->title: NULL',
'filter' =>
CHtml::activeDropDownList(
$expenses, 'type_id',
CHtml::listData(ExpensesTypes::model()->findAll(array('order'=>'id ASC')), 'id', 'title')
)
)
),
));
URL: /?Expenses%5Bid%5D=&Expenses%5Btype_id%5D=1&page=1&ajax=yw2
Пример запроса:
Код: Выделить всё
Expenses[id]:
Expenses[type_id]:1
page:1
ajax:yw2
URL: /?page=2&ajax=yw2
Пример запроса:
Код: Выделить всё
page:2
ajax:yw2
URL: /?page=2&ajax=yw2&Expenses%255Bid%255D=&Expenses%255Btype_id%255D=1&
Пример запроса:
Код: Выделить всё
page:2
ajax:yw2
Expenses%255Bid%255D:
Expenses%255Btype_id%255D:1