Saludos a todos.
Soy novatillo en Yii y estoy haciendo un proyecto para ir avanzando.
Estoy intentando crear un form con tres modelos, y que haga un renderpartial con cada uno de los _form de los modelos (factura, cliente, productoXXX). Aún es un prototipo, por éso factura es model ahora, y en un futuro próximo será model_factura.
Lo he realizado con la vista create y con un renderPartial:
echo $this->renderPartial('_form', array('model'=>$model, 'model_cliente'=>$model_cliente, 'model_producto001'=>$model_producto001,));
Accedo al _form de factura completo en el view create y le voy insertando los campos de cada modelo:
<?php
$this->widget('zii.widgets.jui.CJuiDatePicker', array(
'name'=>'Factura[fecha_venta]',
// 'header'=>'fecha_venta',
// additional javascript options for the date picker plugin
'options'=>array(
'showAnim'=>'fold',
'dateFormat'=>'dd-mm-yy',
),
'htmlOptions'=>array(
'style'=>'height:20px;width:80px;'
),
));
?>
<?php echo $form->error($model,'fecha_venta'); ?>
<?php echo $form->labelEx($model_cliente,'nombre'); ?>
<?php echo $form->textField($model_cliente,'nombre'); ?>
<?php echo $form->error($model_cliente,'nombre'); ?>
$products = Producto::model()->findAll('area = :area', array(':area' => $_GET['id']));
echo "Producto: ".CHtml::activeDropDownList($model, 'producto_id', CHtml::listData($products, 'producto_id', 'nombre'));
// etc...
Funciona bien, valida y graba en la base de datos.
Pero me gustaría integrarlo con un CJuiTabs. No es imprescindible, pero sí sería deseable… Sobre todo porque cada factura puede tener un sólo producto, y éste ser heterogéneo (desde bebidas alcohólicas hasta paseos en helicóptero, de ahí lo de ProductoXXX)
En el _form de factura tendría sus campos, y llamaría a un partial (o un método similar) para el _form de cliente y el de productoXXX.
En mi Factura controller, en el actionCreate tengo:
$model=new Factura;
$model_cliente=new Cliente;
$model_producto001=new Producto001;
if(isset($_POST['Factura'], $_POST['Cliente'], $_POST['Producto001']))
{
// ajax validate & save
}
$this->render('create',array(
'model'=>$model,
'model_cliente'=>$model_cliente,
'model_producto001'=>$model_producto001,
));
Pero en el create de factura sólo me funciona bien así:
$this->widget('zii.widgets.jui.CJuiTabs',array(
'tabs'=>array(
'type1'=>$this->renderPartial('_form',array('model' => $model, 'model_cliente'=>$model_cliente, 'model_producto001'=>$model_producto001, ), true ),
'StaticTab 2'=>array('content'=>'Content for tab 2', 'id'=>'tab2'),
// 'eltres'=>$this->renderPartial('_form', array('model_cliente'=>$model_cliente, ), $this),
// panel 3 contains the content rendered by a partial view
// 'AjaxTab'=>array('ajax'=>$ajaxUrl),
),
// additional javascript options for the tabs plugin
'options'=>array(
'collapsible'=>true,
),
));
No soy capaz de meter en cada tab su partial y que no me genere errores.
Me imagino que el problema está en la declaración de modelos dentro del actionCreate o de cómo paso los modelos al render(‘create’=> para que luego me funcionen los partial independientemente de si están ‘dentro’ del form Factura o no.
No sé si me he explicado bien.
¿Alguien me puede orienter en la dirección correcta?
Gracias anticipadas.