Problemas al usar los combos

9 views
Skip to first unread message

SOS

unread,
Nov 10, 2009, 8:04:25 AM11/10/09
to symfony-es
Estimados amigos del grupo lei los post que hay pero no logro entender
bien el funcionamiento de un combo con ajax, sere mas especifico me
genere con el crud mis formularios ahora en el listar que sale por
default quiero agregar 2 combos para cuando seleccione el primero me
carge el segundo y del segundo seleccionar un registro y hacer que me
muestre la lista con lo registros de acuerdo al valor del
combo,agradesco su gentil colaboracion......

Rodrigo Ramirez Norambuena

unread,
Nov 10, 2009, 10:37:21 AM11/10/09
to symfo...@googlegroups.com

Hola,

Puedes mirar esto

http://symfoneando.blogspot.com/2007/09/crear-listas-dependientes-con-ajax-en.html

...claro es de una versión antigua de Symfony pero ahí tienes una idea.


--
Rodrigo Ramírez Norambuena
http://decipher.blackhole.cl

Moises Burgos

unread,
Nov 10, 2009, 11:04:45 AM11/10/09
to symfo...@googlegroups.com
Hay un plugin que facilita el trabajo con combos dependientes sfJqueryWidgetsPlugin... igual puedes parearte por estos links, a mi me servieron de mucha ayuda


Espero te sirva de ayuda, saludos.

rocaloru

unread,
Nov 10, 2009, 11:30:16 AM11/10/09
to symfony-es
si lo quieres hacer con widgets puedes utilizar el plugin
sfJqueryWidgetsPlugin aqui hay un ejemplo

http://sandbox-ws.com/frameworks/symfony-frameworks/sfjquerywidgetsplugin

y aqui hay otro hilo de discusion del grupo....
http://groups.google.com.gt/group/symfony-es/browse_thread/thread/9369dd8db8130b38?fwc=1

Ya lo probe y funciona muy bien....espero y te sirva....saludos

On Nov 10, 8:37 am, Rodrigo Ramirez Norambuena
<decip...@linuxchillan.cl> wrote:
> El día 10 de noviembre de 2009 10:04, SOS <mdrc...@gmail.com> escribió:
>
>
>
> > Estimados amigos del grupo lei los post que hay pero no logro entender
> > bien el funcionamiento de un combo con ajax, sere mas especifico me
> > genere con el crud mis formularios ahora en el listar que sale por
> > default quiero agregar 2 combos para cuando seleccione el primero me
> > carge el segundo y del segundo seleccionar un registro y hacer que me
> > muestre la lista con lo registros de acuerdo al valor del
> > combo,agradesco su gentil colaboracion......
>
> Hola,
>
> Puedes mirar esto
>
> http://symfoneando.blogspot.com/2007/09/crear-listas-dependientes-con...

williams

unread,
Nov 10, 2009, 3:03:35 PM11/10/09
to symfo...@googlegroups.com
Claro, lo que no dicen es que a la primera ves funciona, pero cuando el usuario envía el formulario y este no pasa alguna de las validaciones de formularios se vuelve a recargar los combos dependientes con todos los valores y se muestran filtrados como la primera vez. Yo le di vueltas hace tiempo como solucionar eso pero no supe :(

Todavía estoy esperando a ver si alguién con mas campo a ver si resuelve el problem

murkein


--- El mar 10-nov-09, rocaloru <aguil...@gmail.com> escribió:


¡Obtén la mejor experiencia en la web!
Descarga gratis el nuevo Internet Explorer 8
http://downloads.yahoo.com/ieak8/?l=e1

mauro dario rojas chavez

unread,
Nov 10, 2009, 4:08:37 PM11/10/09
to symfo...@googlegroups.com
Por favor un ejemplo de 2 combos con ajax ya probe con todo lo k envian pero no me funciona

williams

unread,
Nov 10, 2009, 5:00:17 PM11/10/09
to symfo...@googlegroups.com
Bueno men a pesar de lo que te dije que no se filtran nuevamente cuando el formulario no pasa un validator, ahi te va el ejemplo.

El ejemplo que te explicaré aquí será con el típico País-Estado y como ya sabes un país tiene 1-n Estados, bueno ahí te va.

Los pasos son los siguientes:
1- Instalar el plugin sfJqueryWidgetsPlugin
2- En mi caso, el formulario donde me aparecen los dos combos (país-estado), se llama DatosPersonales. Ahora bién, en tu caso ve a la carpeta donde esta la clase que hereda de tu clase base para el formulario.
3-Cuando estés allí, escribe las siguientes líneas de código:
    $this->widgetSchema['pais_id'] = new sfWidgetFormPropelSelectAjax(array(
      'model' => 'Pais',
      'method' => 'getNombre',
      'url' => 'estado/cargarEstadosPorPais',
      'update' => 'datos_personales_estado_id',
      'update_element' => 'select',
      'add_empty' => false
    )); 

NOta:
1-pais_id es el nombre en mi base de datos para el id de paises, colocale el tuyo ahí.
2-model Pais es el nombre del modelo generado por propel
3-method, es el metodo que devolverá el valor que queramos que aparezca en el combo, en este caso, el nombre del país
4-url, aquí se declara el modulo-accion que se ejecutara y que nos devolverá la data vía ajax en la vista.
5-update_element, es el tipo de elemento que modificara en la vista, en este caso, un elemento select (donde se cargará la lista de los estados por el pais seleccionado)
En este caso el nombre es: datos_personales_estado_id, este nombre si no sabes donde sales, solo dale a ver el codigo fuente de la vista en el explorador y veras el nombre del select para tu caso.

Continuando con los pasos generales,
4-Como vimos anteriormente necesitamos codificar la accion de la url. Para eso declaramos la siguiente accion en el modulo estado:
  public function executeCargarEstadosPorPais(sfWebRequest $request){
    if ($request->getParameter('id') != ''){
        $estados = EstadoPeer::doSelectByPais($request->getParameter('id'));
        //$pais = PaisPeer::retrieveByPK($request->getParameter('id'));
        //$this->renderText('<option value="">SELECCIONE</option>');
        foreach ($estados as  $estado) {
            $this->renderText('<option value="'.$estado->getId().'">'.$estado->getNombre().'</option>');
        }
    }
    return sfView::NONE;
          /*if($request->getParameter('idPais')){
        $this->estados = EstadoPeer::doSelectByPais($request->getParameter('idPais'));
      }*/
  }

Ahora explicare de esta accion el metodo Peer:
EstadoPeer::doSelectByPais($request->getParameter('id'));
Vamos a la carpeta lib/model y buscamos el archivo Peer correspondiente a nuestro modulo, en mi caso EstadoPeer y declaramos el siguiente metodo correspondiente al usado en la acción:
    static public function doSelectByPais($pais){
        $c = new Criteria();
        $c->add(EstadoPeer::PAIS_ID, $pais);
        return EstadoPeer::doSelect($c);
    }
El cual nos devuelve los registros que procesamos en la acción y devolvemos todo eso con render text para pasarlo vía ajax al select de la vista (lo de ajax es la parte que hace el plugin utilizando jquery)

Como podes ver es algo realmente sencillo, claro a muchos les parecerá engorroso pero es lo ideal para reusar el código y evitar estar reinventando la rueda.

Otra cosa buena de este plugin es que como usa jquery, funciona sin problema alguno al menos en iexplorer y mozilla, no se los demás.

Suerte amigo y espero que te sirva esta información.
murkein


--- El mar 10-nov-09, mauro dario rojas chavez <mdr...@gmail.com> escribió:

williams

unread,
Nov 10, 2009, 5:23:18 PM11/10/09
to symfo...@googlegroups.com
Se me ocurrió hace rato que le publiqué la ayuda al men de los combos. Es con respecto al problema ese de que el combo de estados se recarga con todos los estados obviando el país seleccionado cuando luego del submit del formulario este no pasa algún validator.

Bueno, la idea que se me ocurrio es la siguiente, le podemos colocar un evento onload javascript a esa vista para que pregunte si hay un id seleccionado en el combo padre para que mediante ajax llene filtradamente el combo hijo? bueno, no se, se me ocurre y no tengo para probar ahorita. Si pueden probar me avisan sino, tratare de configurar symfony para probarlo.

murkein


--- El mar 10-nov-09, williams <william...@yahoo.com> escribió:

Moises Burgos

unread,
Nov 10, 2009, 5:07:19 PM11/10/09
to symfo...@googlegroups.com
No veo que el inconveniente sea tan grande, con que hagas validaciones del lado del cliente deberias reducir drasticamente la probabilidad de que eso ocurra

Saludos.

mauro dario rojas chavez

unread,
Nov 11, 2009, 11:07:24 AM11/11/09
to symfo...@googlegroups.com
amigos una consulta cuando selecciono un registro del select no me ejecuta el onchange tengo el use_helper(''javascript)
<table>
        <tr>
            <td>Empresa</td>
            <td><?php echo select_tag('txtEmpresa',
                                       objects_for_select(EmpresaPeer::getEmpresas(),
                                                          'getIdempresa','getRazon','',
                                                          'include_custom=<< Seleccione >>',
                                                           array('onChange' => remote_function(array('update' => 'perfil',
         'url' => 'usuario/ajaxPerfil',
          'with' => "'idEmpresa='$('txtEmpresa').value",
         'script' =>true,  )  ) ) ) )
                ?>
            </td>
        </tr>
</table>

que estoi haciendo mal por fav ayuda..

mauro dario rojas chavez

unread,
Nov 11, 2009, 2:37:14 PM11/11/09
to symfo...@googlegroups.com

gracias a todos ya resolvi mi problemaaaaa era un lapsus criticus que me dio agradesco a todos por su ayuda....hasta nuevo aviso.
Reply all
Reply to author
Forward
0 new messages