Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

formularios dinámicos con Yii

Estas en el tema de formularios dinámicos con Yii en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola a todos, quiero usar Yii para una aplicación donde se crean materiales bibliográficos, donde existen libros, revistas, tesis, etc..,todos ellos tienen campos en común, ...
  #1 (permalink)  
Antiguo 19/11/2011, 06:10
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 10 meses
Puntos: 209
formularios dinámicos con Yii

Hola a todos, quiero usar Yii para una aplicación donde se crean materiales bibliográficos, donde existen libros, revistas, tesis, etc..,todos ellos tienen campos en común, pero también un grupo diferente de opciones (a guardar en la BD tmb)
quiero que la acción de crear cualquier de estos materiales sea en el mismo lugar,
y que con un select, se escoja el tipo a crear con lo que con ajax me traería los campos específicos para ese material, ahora bien tengo entendido que cada controlador/modelo/vista está asociado a una tbl (ya que fue creado con CRUD Generator), cómo pudiera resolver esto ?
con ajax es simple traer los campos particulares, pero como los manejo entonces desde el controlador para realizar la inserción en la tbl correspondiente
  #2 (permalink)  
Antiguo 20/11/2011, 07:19
Avatar de 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
  #3 (permalink)  
Antiguo 20/11/2011, 07:46
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 10 meses
Puntos: 209
Respuesta: formularios dinámicos con Yii

excelente !, algo así es como lo hago en el mundo "NO MVC", pero no sabía como traducirlo a MVC y Yii..
como voy a usar CRUD Generator para cada tipo de material , entonces tendría los formularios independientes para cada tipo..
entonces que me recomiendas que cargue esos formularios con _ajaxview.php ?

yo entiendo la idea, pero no se traducirla a Yii

en un mundo sin Yii haría algo como:

en la vista con cambio el action del formulario con ajax y cargo el formulario que corresponda y listo.

pero no se como cambiar el contralador del formulario escogido,( tengo entendido que cada tbl tiene su propio formulario)
muchas gracias por tu tiempo @NUCKLEAR
  #4 (permalink)  
Antiguo 20/11/2011, 07:49
Avatar de 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

Para que no entienda aca subi un ejemplo.

http://yii.it-media.com.ar/site/vista

Para cambiar de controller en cada change del select le podes poner como valor a cada option:
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' : $('#selector').val(),
  9.  
  10.          'cache':false,
  11.          'success':function(html){
  12.             jQuery("#vista").html(html)
  13.          }
  14.       });
  15.       return false;
  16.    });
  17. });
  18. /*]]>*/
  19. </script>
  20. <hr />
  21. <h3>Este es un render partial con ajax</h3>
  22.  
  23. <select id="selector">
  24.   <option value="/site/form1">Cargar A</option>
  25.   <option value="/site/form2">Cargar B</option>
  26. </select>
  27. <div id="vista"></div>
  28.  
  29. <hr />

Cuando creas un crud con el crud builder(gii) ya te crea los partials del form(_form.php). Solo tenes que llamarlos desde cada action.
__________________
Drupal Argentina

Última edición por NUCKLEAR; 20/11/2011 a las 07:56
  #5 (permalink)  
Antiguo 20/11/2011, 07:52
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 10 meses
Puntos: 209
Respuesta: formularios dinámicos con Yii

muchas gracias !.
cómo manejarías el controlador suponiendo que cada formulario corresponde a una tbl en particular ?
  #6 (permalink)  
Antiguo 20/11/2011, 08:03
Avatar de 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

Cita:
Iniciado por iviamontes Ver Mensaje
muchas gracias !.
cómo manejarías el controlador suponiendo que cada formulario corresponde a una tbl en particular ?
No entiendo tu pregunta.
__________________
Drupal Argentina
  #7 (permalink)  
Antiguo 20/11/2011, 08:23
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 10 meses
Puntos: 209
Respuesta: formularios dinámicos con Yii

lo siento, intentaré explicarme mejor...
1 - voy a almacenar cada material en una tabla independiente,
2 - haré uso del Crud Generator, con lo que tendré los formularios de creación, controladores etc para cada tabla (tipo de material), pero no quiero que la creación sea un proceso independiente para cada uno, sino que exista una vista única, y se pueda escoger el tipo de material, con lo que llamaríamos con ajax los campos del material en cuestión...
el ejemplo que me explicas está muy bueno, pero pones los campos directamente en _ajaxview.php, pero yo no quisiera hacerlo así, sino usar los mismo que me genera el CRUD...

pero no se como procesarlo en el controlador específico para cada material

PD: no había visto lo que me explicas del controlador en el value de los options

Última edición por iviamontes; 20/11/2011 a las 08:31
  #8 (permalink)  
Antiguo 20/11/2011, 08:37
Avatar de 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

_ajaxview.php es el partial, en tu caso llamarias al partial _form.php que es el partial que te genera el Crud builder

Si te fijas en cada vista que te genera el crud tenes una carpeta con el nombre del controller y dentro el _form.php

El select lo pondrias en la vista donde queres que te imprima el partial _form.

En mi ejemplo y la url que te he puesto he usado una vista separada donde he puesto el select. Este es el metodo que llama a la vista dentro de mi site controller.

Código PHP:
Ver original
  1. public function actionVista(){
  2.    
  3.     $this->render('vista');  
  4.    
  5.   }

Y en mi vista vista.php tengo el select
__________________
Drupal Argentina
  #9 (permalink)  
Antiguo 20/11/2011, 08:41
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 10 meses
Puntos: 209
Respuesta: formularios dinámicos con Yii

muchas gracias, creo que entiendo la lógica..
muchas gracias una vez más, en un rato me pongo con eso, ahora estoy con el tema de urlManager, otro punto importante para la App.
gracias @NUCKLEAR

Etiquetas: select, yii, formulario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:32.