Yii: CGridView Filter examples

Yii: CGridView Filter examples

Last updated:

In order to able to use filters in a CGridView inside a Yii application, this is what you need to do:

on the model, you need a search() method (maybe you already have one, if you used Gii)

public function search() {
    $criteria = new CDbCriteria;
    $criteria->compare('id', $this->id);
    $criteria->compare('name', $this->name, true);
    /*
    * ------now the data provider---------
    */
    return new CActiveDataProvider($this, array(
                'criteria' => $criteria,
                'pagination' => array(
                    'pageSize' => 20,
                ),
            ));
}

in the controller, this is the code you need(replace actionIndex, YourModelClassName with your specific values):

public function actionIndex() {
    $model = new YourModelClassName('search');
    $model->unsetAttributes();  // clear any default values
    if(isset($_GET['YourModelClassName'])){
            $model->attributes=$_GET['YourModelClassName'];
    }
    $this->render('index', array(
            'model'=>$model,
    ));
}

on the view file: (where you actually instantiate the CGridView):

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$model->search(),
    'filter'=>$model,

If you want look at how to make filters with related models, you might want to have a look at this: yii-cheat-sheet-filtering-by-related-models-in-a-cgridview

N.B.: another good source of example on how to make filters are the admin view files that are generated by Gii.

This is a w.i.p. (work in progress).

Dialogue & Discussion