Yii: Anzahl der Zeilen im Grid per DropDown auswählen (pagesize)

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.