[Solucionado] Tabla Cgridview Con Datos De Otro Modelo

Hola a todos!

Tengo un modelo Proyecto y un modelo Evento (Proyecto tiene 0-n Eventos).

Quiero mostrar en la vista de Proyecto un CGridView con todos los Eventos y poder filtrar (como si fuese en el admin de Eventos) sobre esa tabla.

Mi dataProvider es (no uso relaciones por diversos problemas):




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

            'criteria'=>array(

                'condition'=>"idProyecto=$model->id",

            ),

            'pagination'=>array(

                'pageSize'=>10,

            ),

        ));



y mi tabla:




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

            'id'=>'evento-grid',

            'dataProvider'=>$dataProvider,

            'columns'=>array(

            ...



Qué debería poner en ‘filter’? ???

Gracias por adelantado.

Es más sencillo hacerlo al estilo clásico, o mejor dicho al estilo Yii:




    	$submodel = new Evento('search');

    	$submodel->unsetAttributes(); // clear any default values

    	$submodel->idProyecto = $model->id; // IMPORTANTE!!!

    	if (isset($_GET['Evento'])) {

        	$submodel->attributes = $_GET['Evento'];

    	}



y en la vista:




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

        	'id'=>'evento-grid',

        	'dataProvider'=>$submodel->search(),

        	'filter'=>$submodel,

        	'columns'=>array(

        	...



Saludos.

Que fácil que estaba! jajaja

Muchas gracias, Ricardo!

Reformulo la pregunta porque no se de que forma seguir probando:

Supongamos que quiero mostrar ahora Proyectos en la Home. Proyectos tiene un campo ‘prioridad’ numérico.

¿Cómo podría mostrar Proyectos que tengan prioridad 1 O 2?

Dentro del actionIndex() de SiteController logro, con el siguiente código, ver los Proyectos con ‘prioridad’=‘1’:




        $proyectos = new Proyecto('search');

        $proyectos->unsetAttributes();

        $proyectos->prioridad = 1;

        if (isset($_GET['Proyecto'])) {

            $proyectos->attributes = $_GET['Proyecto'];

        }



Si pongo ‘1’ funciona igual, pero si pongo ‘1 OR 2’ sólo toma el 1.

Ayuda por favor!

Pues tendrias q cambiar el uno por un parametro que recivieras por get. Asi q haces un form q tenga un dropdow con 1 y 2 y envias por get la variable.

No puedo poner mas ejemplo porq estoy en el mobil pero si lo necesitas crea un nuevo hilo con esta nueva pregunta.

Logré solucionarlo!

No tengo idea de si es la mejor opción pero mediante prueba y error llegué a esta solución: Crear un nuevo escenario y filtrar mediante la siguiente línea:


$criteria->addInCondition('prioridad', array(1,2));

Luego en el GridView, ‘dataProvider’=>$loquesea->nuevoEscenario().

Espero que le sirva a alguien.

Saludos.

Buenas tardes, gracias por su ejemplo. Lo he utilizado para visualizar en la vista del modelo Professionales, el CGridView de los centros que le corresponden (modelo centros). Funciona perfectamente pero el boton Delete del gridview no elimina el centro correspondeinte. Me aparece un error 404, pàgina no encontrada.

Podria orientarme para poder solucionarlo.

Gràcies de antemano.

Deberías configurar la URL de la acción delete. Algo así si usás Bootstrap:





                array(

                    'class'=>'bootstrap.widgets.TbButtonColumn',

                    ...

                    'buttons'=>array(

                        'delete' => array(

                            'url'=>'Yii::app()->createUrl(...)',

                        ),

                    ),

                ),

Saludos.

Muchas gràcias, voy a probar-lo.

Chasss Gracias…Dios como a cuesta a veces encontrar las soluciones en Yii! :)