Um in einer Yii Tabelle ("zii.widgets.grid.CGridView") die Anzahl der angezeigten Zeilen durch den Benutzer dynamisch auswählen zu lassen, zeigt Ihnen dieser Artikel eine Lösung:
Beispielansicht:
Dafür sind in drei Dateien kleine Anpassungen notwendig:
(1) Im Controller ("protected/controllers/xxxController.php"):
public function actionAdmin() { // [...] if (isset($_GET['pageSize'])) { Yii::app()->user->setState('pageSize',(int)$_GET['pageSize']); unset($_GET['pageSize']); } // [...]
}
(2) Im Model ("protected/models/xxx.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, ));
}
(3) Im View ("protected/views/xxx/admin.php"):
$pageSize=Yii::app()->user->getState('pageSize',Yii::app()->params['defaultPageSize']);
$this->widget('zii.widgets.grid.CGridView', array( "id" => "xxx-grid", "dataProvider" => $model->search(), // [...] array( "class" => "CButtonColumn", "header" => CHtml::dropDownList('pageSize',$pageSize,array(10=>10,20=>20,50=>50,100=>100,999999=>"Alles"),array( "onchange" => "$.fn.yiiGridView.update('xxx-grid',{ data:{pageSize: $(this).val() }})", )), ), ),
));
Bitte nicht vergessen, bei Schritt (3) auch den Namen der Tabelle (im Beispiel "xxx-grid") auch im "onChange" Event anzupassen. Ansonsten reagiert die Anzeige nicht auf den Wechsel der Auswahl und bleibt stets auf der Standard-Anzahl.