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
| 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ó: |
|
| 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ó: |
| 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ó: |