Ver Mensaje Individual
  #2 (permalink)  
Antiguo 20/11/2011, 07:19
Avatar de NUCKLEAR
NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 19 años, 1 mes
Puntos: 890
Respuesta: formularios dinámicos con Yii

Podrias usar partials ara hacer los formularios personalizados para cada opcion.
Luego con el evento change del select llamar por Ajax a esos partials.


Lo que tendrias que analizar es si crear un solo controller para cada action del post de tu formulario(Si es muy complejo es lo que yo haria asi tendrias mas control, si no lo es con un switch bastaria para insertar los datos) aunque no explicas bien si los campos se guardan en la misma tabla o usas una ralacion.

Te pongo un ejemplo de como llamar por Ajax a un partial:

Suponiendo que tenes tu controller site y dentro el metodo Cargarformulario

Código PHP:
Ver original
  1. public function actionCargarformulario(){
  2.    
  3.    $this->renderPartial('_ajaxview', array('tipo' => $_GET['v']));
  4.        
  5.   }


En tu vista donde mostrarias el formulario:
Código PHP:
Ver original
  1. <?php Yii::app()->clientScript->registerCoreScript('jquery'); ?>
  2. <script type="text/javascript">
  3. /*<![CDATA[*/
  4. jQuery(function($) {
  5.    jQuery('body').delegate('#selector','change',function(){
  6.      
  7.      jQuery.ajax({
  8.          'url':'/site/Cargarformulario/?v=' + $('#selector').val(),
  9.          'cache':false,
  10.          'success':function(html){
  11.             jQuery("#vista").html(html)
  12.          }
  13.       });
  14.       return false;
  15.    });
  16. });
  17. /*]]>*/
  18. </script>
  19.  
  20. <h3>Este es un render partial con ajax</h3>
  21.  
  22. <select id="selector">
  23.   <option value="a">Cargar A</option>
  24.   <option value="b">Cargar B</option>
  25. </select>
  26. <div id="vista"></div>


Y por ultimo el partial: lo llamaremos _ajaxview.php esta dentro de tu carpeta views/site/

Código PHP:
Ver original
  1. <?php if($tipo == "a"){
  2.     echo "Este es un partial 'a' que va ser llamado por Ajax";
  3. }
  4.  
  5. else{
  6.  
  7.    echo "Este es un partial que va ser llamado por Ajax";
  8. }
  9. ?>

Listo, con eso podes cargar cualquier partial por ajax ;)
Facil..

Saludos
__________________
Drupal Argentina