Agregar Widget Cgridview En Create

Buenas tardes, estoy intentando colocar el CGridView de una tabla en la vista del Create despues de el llamado al form para que el usuario vea los tipos de estructura que existen para no repetir los mismo. todo bien, el cuadro sale. pero no me perimite utilizar el campo de filtrado. y no se porque… alguna idea?


<p>En este formulario debe especificar la denominación del tipo de Organismo / Ente que desea crear. 

esta propiedad será asignada a algún <strong>Organismo / Ente</strong> cuando se realice la creacion 

del mismo. Los tipos de Organismo / Ente existentes se encuentran en un cuadro a continuacion del 

formulario. puede utilizar campos de busqueda para filtrar los campos. </p>


<h1>Crear Tipo de Estructura</h1>


<?php $this->renderPartial('_form', array('model'=>$model)); ?>




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

	'id'=>'tbl-tipoestructura-grid',

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

	'filter'=>$model,

	'columns'=>array(

		//'id',

		'denominacion',

		//'estatusreg',

		array(

		'class'=>'CButtonColumn',

		'template'=>'{update}{view}{delete}',

            'buttons'=>array(

                'update'=>array(

                        'visible'=>'false', //Cambiar por variable, la cual desde el modelo vendra en 1(true) o 0(false) dependiendo de donde lo esté llamando (Creacion de items o Modo Consulta)

                ),

                'view'=>array(

                        'visible'=>'false',

                ),

                'delete'=>array(

                        'visible'=>'false',

				),

			),

		),

	),

)); ?>

Buenos días.

Supongo que en tumodelo no habrás tocado nada, por lo que necesitas añadir el escenario "create" a tus reglas de filtrado.




// The following rule is used by search().

// @todo Please remove those attributes that should not be searched.

array('field1, field2', 'safe', 'on'=>'search, create'),



Un saludo.

Hola lagogz, muchas gracias por responder. no he tocado nada del modelo e hice lo que me pusiste y aun no puedo hacer las busquedas… quedó asi. pero no se que puede estarme faltando.


	public function rules()

	{

		// NOTE: you should only define rules for those attributes that

		// will receive user inputs.

		return array(

			array('denominacion', 'required'),

			array('estatusreg', 'numerical', 'integerOnly'=>true),

			// The following rule is used by search().

			// @todo Please remove those attributes that should not be searched.

			array('id, denominacion, estatusreg', 'safe', 'on'=>'search, create'),

		);

	}




'filter'=>$model,

en el action create el $model llega vacio … se llena luego de hacer save por lo mismo entonces cuando deseas usar el filtro va a llegar vacio … ps creo que debe ser por eso …

Entonces será que es un poco mas complicado de lo que pense :’(

Cuando creas tu modelo en actionCreate le asignas el escenario "create"?




$model->scenario = "create";



En mi opinión deberías crear un modelo llamado "model" para utilizar en el formulario de alta, y otro modelo llamado por ejemplo "modelTipoEstrcutura" para utilizar con el CGridView. Este último lo cargas con los datos de tipo de estructura antes de enviarlo a la vista create y listo.

De todas formas creo que te debería funcionar la búsqueda utilizando un sólo modelo. El crear 2 modelos te lo comento pq al enviar el formlario podrías tener problemas con los datos.

Que el modelo llegue vacío significa q en la primera carga de la página el CGridView no mostrará ningún registro, pero al filtar debería hacerlo.

Te dá algún error o no te hace nada? Distingues mayúsculas y minúsculas?

Puedes mostrar tu función search?

Un saludo.

Esta es mi funcion search(). no la he tocado cuando le doy enter no hace nada. no realiza la busqueda. el deberia distinguir mayusculas de mi minusculas, por lo que si busco algo que no esta deberia traer vacio. pero el simplemente no hace nada.


public function search()

	{

		// @todo Please modify the following code to remove attributes that should not be searched.


		$criteria=new CDbCriteria;


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

		$criteria->compare('denominacion',$this->denominacion,true);

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


		return new CActiveDataProvider($this, array(

			'criteria'=>$criteria,

		));

	}

Hola,

Lo único que necesitas hacer es poner en el action create la asignacion de parámetros:




if(isset($_GET['Modelo'])){//sustituye Modelo por el nombre de tu modelo

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

}



Ten en cuenta que por defecto en un formulario recogemos los valores por POST pero el gridview envia estos valores por GET.

Un saludo

Hola Rahif muchas gracias por contestar, te cuento que hice lo que me dijiste pero al realizar cualquier busqueda, ejecuta el create y guarda lo que consiga en el formulario, por otra parte todo el cuadro de busqueda del admin desaparece. no se si estoy haciendo algo mal. lo puse asi.


public function actionCreate()

	{

		$model=new TblTipoestructura;


		// Uncomment the following line if AJAX validation is needed

		// $this->performAjaxValidation($model);


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

		{

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

			if($model->save())

				$this->redirect(array('view','id'=>$model->id));

		}


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

			'model'=>$model,

		));

	}

Hola

Pon la función así:




public function actionCreate()

        {

                $model=new TblTipoestructura;


                // Uncomment the following line if AJAX validation is needed

                // $this->performAjaxValidation($model);


                if(isset($_POST['TblTipoestructura']))

                {

                        $model->attributes=$_POST['TblTipoestructura'];

                        if($model->save())

                                $this->redirect(array('view','id'=>$model->id));

                }


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

                {

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

                }

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

                        'model'=>$model,

                ));

        }



El post es para guardar los datos que vienen del formulario y el get para actualizar los datos del gridview.

Estoy suponiendo que solo van parámetros por get en el gridview.

Prueba y comenta.

Excelente Rahif, muchisimas gracias! funciona perfecto. lo queria así exactamente. me has ayudado un monton. +1 a todos tus aportes. :)

Contento de haber sido útil y gracias por los puntos.