Wiki
Clone wikiyii-stuff / gridview_paging_dropdown
Как задать количество позиций на странице CGridView через выпадающее меню
/protected/config/main.php
:
<?php
// ..
// Доступно через Yii::app()->params['defaultPageSize']
'params'=>array (
// ..
'defaultPageSize'=>20,
// ..
)
// ..
?>
/protected/controllers/MyController.php
:
<?php
// ..
public function actionAdmin()
{
// если изменилась настройка
if (isset($_GET['pageSize'])) {
Yii::app()->user->setState('pageSize',(int)$_GET['pageSize']);
unset($_GET['pageSize']); // сбросим, чтобы не пересекалось с настройками пейджера
}
// ..
}
// ..
?>
/protected/models/MyModel.php
:
<?php
public function search()
{
// ..
return new CActiveDataProvider(get_class($this),array(
'pagination'=>array(
'pageSize'=> Yii::app()->user->getState('pageSize',Yii::app()->params['defaultPageSize']),
),
'criteria'=>$criteria,
));
}
?>
/protected/views/my/admin.php
:
<?php
// считываем настройку
$pageSize=Yii::app()->user->getState('pageSize',Yii::app()->params['defaultPageSize']);
?>
<?php
// выводим датагрид
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'user-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'id',
'username',
'email',
// наша колонка с настройками
array(
'class'=>'CButtonColumn',
'header'=>CHtml::dropDownList(
'pageSize',
$pageSize,
array(5=>5,20=>20,50=>50,100=>100),
array('class'=>'change-pagesize')
),
),
),
)); ?>
<?php
// немножко JS, чтобы на лету все обновлялось
Yii::app()->clientScript->registerScript('initPageSize',<<<EOD
$('.change-pagesize').live('change', function() {
$.fn.yiiGridView.update('user-grid',{ data:{ pageSize: $(this).val() }})
});
EOD
,CClientScript::POS_READY); ?>
Автор: Mike
Updated