Problema con pestañas y formularios

Buenas, tengo varios formularios que quiero mostrar en una sola vista, la idea es que llene los datos de todos los formularios y exista un solo botón para guardar todo.

Lo que estoy haciendo básicamente seria como un censo donde:

-En la primera pestaña registro los datos de la vivienda

-En las otras pestañas registro los datos de las personas que viven alli

algo así:

Investigando tanto en el foro como en otras comunidades logre hacer lo siguiente

en la vista create, en el create no el _form hice lo siguiente:




<?php

/* @var $this ViviendasController */

/* @var $model Viviendas */

$this->setPageTitle('CC-JAP Crear Vivienda');

$this->menu=array(

	array('label'=>'Administrar Viviendas', 'url'=>array('admin')),

);

?>


<h1>Crear Viviendas</h1>


<?php


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

	'tabs' => array(

		'Viviendas' =>  array('content' => $this->renderPartial("//viviendas/_form",array("model"=>$model),true)),

		'Cabeza de Familia' =>  array('content' => $this->renderPartial("//personas/_form",array("model"=>$<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='B)' />,true)),

		'Habitante 1' =>  array('content' => $this->renderPartial("//personas/_form",array("model"=>$<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='B)' />,true)),

		'Habitante 2' =>  array('content' => $this->renderPartial("//personas/_form",array("model"=>$<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='B)' />,true)),

		'Habitante 3' =>  array('content' => $this->renderPartial("//personas/_form",array("model"=>$<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='B)' />,true)),

		'Habitante 4' =>  array('content' => $this->renderPartial("//personas/_form",array("model"=>$<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='B)' />,true)),

		'Habitante 5' =>  array('content' => $this->renderPartial("//personas/_form",array("model"=>$<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='B)' />,true)),

		'Habitante 6' =>  array('content' => $this->renderPartial("//personas/_form",array("model"=>$<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='B)' />,true)),

		'Habitante 7' =>  array('content' => $this->renderPartial("//personas/_form",array("model"=>$<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='B)' />,true)),

	)

));

echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save');

?>



en el controlador de las viviendas en el action create hice lo siguiente por ahora para que me cargue los datos del otro form




public function actionCreate()

	{

		$model = new Viviendas;

		$b = new Personas;


		// Uncomment the following line if AJAX validation is needed

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


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

		{

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

			if($model->save())

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

		}


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

			'model' => $model,

			'b' => $b,

		));

	}



Por aquí todo bien hasta el momento, es decir me hace lo que quiero que es mostrarme los form en varias pestañas en una sola vista

El problema radica a la hora del submit, esta linea que tenemos aquí, en la parte de arriba también se puede ver:




echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save');



Cuando la presiono no hace nada no me dirige a ninguna parte y mas o menos entiendo que es porque básicamente no le estoy diciendo a donde dirigirse.

Me podrían ayudar con esta parte de como decirle a donde debe dirigirse el submit en el controller o si conocen una forma mas eficaz que esta de hacerlo también seria bienvenida esa forma.

Espero puedan ayudarme muchas gracias

si el submitButton esta dentro del formulario se envia al action del formulario, si no esta dentro de un formulario, no sabe donde ir y hay que ponerlo.


echo CHtml::submitButton('Texto', array('submit' => array('controller/action')));

En tu caso tienes n pestañas y en cada 1 habra 1 formulario. Si todos los formularios tienen el mismo action, puedes poner el formulario que contenga todas las pestañas mas el submitButton en la vista create que tienes, y pasar el $form a las vistas.

Bueno si el caso es que lo resolví, no exactamente así pero de igual manera muchas gracias.

Si alguien tiene el mismo problema estoy a la orden para ayudarlo a resolverlo, no lo posteo en este momento por falta de tiempo ya que es bastante extenso el resultado de lo que hice.

Hola quisiera saber como lo resolviste porque quiero hacer un form haci pero no tengo como hacerlo… soy novato en yii

Si sólo quieres un botón submit, sólo necesitas un formulario.

1- Inicio formulario.

2- Juitabs.

3- Submit.

4- Fin formulario.

Algo como esto:




...

$form=$this->beginWidget('bootstrap.widgets.TbActiveForm'...// Inicio formulario

...

$this->widget('zii.widgets.jui.CJuiTabs',... // Juitabs

...

echo CHtml::submitButton(... // Submit

...

$this->endWidget(); // Fin formulario



No sé cómo lo solucionaste, pero no es tan extenso, no???!!!!

Y listo.

lagogz podrías por favor explayarte un poco mas… tengo el mismo problema y me interesa cualquier solución posible pero la tuya no logro entenderla… soy nuevo en yii y estoy teniendo problemas…por favor necesito explicaciones con manzanas U,U

Buenas.

El truco está en poner el inicio del form en el create y no en el _form.

Es decir, si lo que se quiere es tener un sólo botón de submit, sólo es necesario un formulario. Cogiendo el ejemplo de Miguel López sería algo así:





<?php

/* @var $this ViviendasController */

/* @var $model Viviendas */

$this->setPageTitle('CC-JAP Crear Vivienda');

$this->menu=array(

        array('label'=>'Administrar Viviendas', 'url'=>array('admin')),

);

?>


<h1>Crear Viviendas</h1>


<?php


$form=$this->beginWidget('bootstrap.widgets.TbActiveForm'...// Inicio formulario




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

        'tabs' => array(

                'Viviendas' =>  array('content' => $this->renderPartial("//viviendas/_form",array("model"=>$model),true)),

                'Cabeza de Familia' =>  array('content' => $this->renderPartial("//personas/_form",array("model"=>$<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='B)' />,true)),

                'Habitante 1' =>  array('content' => $this->renderPartial("//personas/_form",array("model"=>$<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='B)' />,true)),

                'Habitante 2' =>  array('content' => $this->renderPartial("//personas/_form",array("model"=>$<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='B)' />,true)),

                'Habitante 3' =>  array('content' => $this->renderPartial("//personas/_form",array("model"=>$<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='B)' />,true)),

                'Habitante 4' =>  array('content' => $this->renderPartial("//personas/_form",array("model"=>$<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='B)' />,true)),

                'Habitante 5' =>  array('content' => $this->renderPartial("//personas/_form",array("model"=>$<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='B)' />,true)),

                'Habitante 6' =>  array('content' => $this->renderPartial("//personas/_form",array("model"=>$<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='B)' />,true)),

                'Habitante 7' =>  array('content' => $this->renderPartial("//personas/_form",array("model"=>$<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='B)' />,true)),

        )

));

echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save');


$this->endWidget(); // Fin formulario

?>



En todas las vistas que se cargan en el control CJuiTab no poner formularios.

Como tratas esto en un único controlador? pues tu en las vistas vas a tener varios modelos distintos, entonces:





public function actionCreate()

        {

                $model_1 = new Model1;

                $model2_2 = new Model2;

                ...

                ...

                $model_N = new ModelN;


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

                {

                        $model_1->attributes=$_POST['Model1'];

                }


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

                {

                        $model_2->attributes=$_POST['Model2'];

                }


                ...

                ...

 

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

                {

                        $model_N->attributes=$_POST['ModelN'];

                }




Y listo.

Un saludo.