Filtrar Dataprovider Para Cgridview

Hola a todos! Tengo una duda…

Con el CRUD genere un par de modelos, lo que necesito es filtrar el primer contenido que le mando al CGridView.

Lei por todos lados pero no encontre lo que ando buscando, a ver si alguien me puede ayudar :D

De esta forma, poniendole un valor al atributo, logre solucionarlo por el momento.




public function actionIndex($tipo) {


        $model = new Contenidos('search');

        $model->unsetAttributes();

        $model->tipos_id_tipos = $tipo;




        if (isset($_GET['Contenidos']))

            $model->attributes = $_GET['Contenidos'];


        $this->render('admin', array(

            'model' => $model,

            'tipo' => $tipo,

        ));

    }



Pero tiene que haber una mejor forma de hacer esto, porque si yo necesito preguntar por ejemplo si $tipo es mayor que 2, o si $tipo esta entre 3 y 5, etc… No voy a poder.

Intente miles de formas… Hice algo como:

En el controlador:




        $model = new Contenidos('search');

        $model->unsetAttributes();

        $dataProvider = Contenidos::model()->findAll("tipos_id_tipos = $tipo");



Y despues en la vista:




$this->widget('zii.widgets.grid.CGridView', array(

                    'id' => 'contenidos-grid',

                    'dataProvider' => $dataProvider,



Pero me tira un error de que $dataProvider no es un objeto…

Alguien tiene alguna idea? Me lei un monton de tutoriales y en ninguno encontre lo que busco.

Espero haber sido claro con mi duda.

Cualquier duda pregunten!

Hola, FindAll() te devuelve un array de objetos, no un CActiveDataProvider, que es lo que necesita CGridView.

En el controlador puedes instanciar un CActiveDataProvider con algo así:




$dataProvider=new CActiveDataProvider('Contenidos', array(

    'criteria'=>array(

        'condition'=>'tipos_id_tipos = :tipo',

        'params'=>array(':tipo'=>$tipo),

    ),

    'pagination'=>array(

        'pageSize'=>20,

    ),

));



Tienes una explicación bastante buena del CActiveDataProvider en http://www.yiiframework.com/wiki/381/cgridview-clistview-and-cactivedataprovider/

Espero que te sirva.

Tengo el mismo problema, aunque el mio radica fundamentalmente en que tengo mucha información dentro de un registro que es accedida por diferentes tipos de usuario. Cada tipo de usuario solamente debe acceder a una parte del registro. Lo puedo solucionar con CDbCriteria, pero al utilizar los filtros de la función search y reiniciarlos, me queda el registro entero de nuevo (porque search me devuelve una instancia de CActiveDataProvider sin filtros).