¿Como hacer un dataProvider dinamico en CGridView Yii Framework?

¡Hola a todos!

Lo que intento es enviar(desde una ventana anterior) el id de un usuario y en base a ello mostrar sus registros en el CGridView, y obviamente que el usuario pueda hacer los filtros en base a cada columna. Lo primero lo logre con esta seccion:




'dataProvider'=>new CActiveDataProvider('Prospecto',array(

    'criteria'=>array(

        'condition'=>'id_user='.$_GET['userId'],

    ),

)),



Pero solo hace el filtro en base al id del usuario y no permite hacer los filtros por columnas.¿Me explico?

Este es el codigo en la vista (el modelo y controller estan como los genero Yii al inicio):




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

    'id'=>'users-grid',

    'dataProvider'=>new CActiveDataProvider('Prospecto',array(

       'criteria'=>array(

          'condition'=>'Prospecto[id_user]='.$_GET['userId'],

     ),

    )),

    'filter'=>$model,

    'columns'=>array(

      'campo1',

      'campo2',

    array(

        'class'=>'CButtonColumn',

      ),

    ),

 ));



Buenas tardes, Rodrigo.

Yo no entiendo las ganas que tenéis de complicaros la vida, la verdad!!!!!!

Los filtros por columnas están activos por defecto en cualquier CGridview.

Y olvídate de GETs!!!

Por partes:

1- Estás en una vista A (que ha sido cargada desde una acción de un controlador).

2- Desde esa vista A quieres ir a una vista B (que también deberá ser cargada desde una acción de un ocntrolador, se supone que será el mismo controlador). Y quieres pasarle el identificador de usuario.

3- Imaginemos que en la vista A tengamos un botón para ir a la vista B. Lo que tenemos que hacer es lanzar una acción del controlador correspondiente que nos cargue la vista B.

vistaA.php:




echo CHtml::submitButton('Go to B', array('submit'=>Yii::app()->createUrl('module/prospecto/goToB', array('userId' => 'userIdValue'))));// Si hay módulo lo escribes y si no lo borras.



ProspectoController.php:




public function actionGoToB($userId)

{

     $model = Prospecto::model()->findAllByAttributes(array('userId' => $userId));// Como se llame tu modelo.

     

     $model->scenario = 'searchB';


     $this->render('viewB', array('model' => $model);

}



4- Esto nos llevará a la vistaB, donde tendremos un CGridview con este dataprovider:




'dataProvider'=>$model->searchB($model->userId)



5- Y en el modelo Prospecto.php:




public function searchB($userId)

{

...


$criteria->compare('userId', $userId);


$criteria->compare('campo1', $this->campo1);

$criteria->compare('campo2', $this->campo2);


...

}




Y ya.

Pero es que este es el comportamiento defecto de Yii, por eso te digo que no entiendo tu complicación. Cuando creas tus modelos, vistas y controladores con Gii, automáticamente se crea todo esto (o casi).

Un saludo.