Combos de Recargables Dependientes
De CidesaWiki
Revisión a fecha de 20:54 30 abr 2007; Desi (Discusión | contribuciones)
- El siguiente código se encuentra en el módulo Obras; forma oycdatsol. Para cargar los combos creamos una función CargarCombo en lib/herramientas, la cual contiene el siguiente código.
public static function Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados) { $c = new Criteria(); if ($filtros_tablas[0]!='') { for($a=0;$a<count($filtros_tablas);$a++) { eval('$c->add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');'); //print ('$c->add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');'); } } eval('$lista_arreglo = '.ucfirst(strtolower($tablas[0])).'Peer::doSelect($c);'); $arreglo = array(); foreach($lista_arreglo as $obj_estado) { eval('$arreglo[$obj_estado->get'.ucfirst(strtolower($campos_retornados[0])).'()] = $obj_estado->get'.ucfirst(strtolower($campos_retornados[1])).'();'); } return $arreglo; }
- Luego en el Actions.class.php, creamos la funciones Cargar de cada campo asociado al combo.
public function Cargarpais() { $tablas=array('ocpais');//arreglo de los joins de las tablas $filtros_tablas=array('');//Envio los filtros de las clases $filtros_variales=array('');//Envio los parametros de la funcion $campos_retornados=array('codpai','nompai');// arreglos donde me traigo el nombre y el codigo return $pais= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados); } public function Cargarestados($codpais) { $tablas=array('ocestado');//arreglo de los joins de las tablas $filtros_tablas=array('codpai');//Envio los filtros de las clases $filtros_variales=array($codpais);//Envio los parametros de la funcion $campos_retornados=array('codedo','nomedo');// arreglos donde me traigo el nombre y el codigo return $estado= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados); } public function Cargarmunicipio($codpais,$codestado) { $tablas=array('ocmunici');//areglo de los joins de las tablas $filtros_tablas=array('codpai','codedo');//Envio los filtros de las clases $filtros_variales=array($codpais,$codestado);//Envio los parametros de la funcion $campos_retornados=array('codmun','nommun');// arreglos donde me traigo el nombre y el codigo return $municipio= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados); }
- Luego en el mismoactions.class creamos una función general que contiene la llamada de cada uno de los Cargar que detallamos en las lineas anteriores. Esta función es llamada en las funciones executeEdit() y updateOcdatsteFromRequest().
public function funciones_combos() { $this->pais = $this->Cargarpais(); $this->estados = $this->Cargarestados($this->ocdatste->getCodpai());//contiene los datos de la bd }
Nota: $this->ocdatste->getCodpai() son los parametros que le tenemos que debemos enviarles dependiendo de cuantos filtros debera tener la funcion de cargar combo.
- En los templates de esta forma, creamos un archivo comboSuccess.php que contiene la secuencia de como se deben ejecutar los combos, haciendo uso de Ajax.
<?php use_helper('Object', 'Validation', 'Javascript') ?> <?php if ($tipo=='P') { echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=> remote_function(array( 'update' => 'divMunicipios', 'url' => 'oycdatsol/combo?par=2', 'with' => "'pais='+document.getElementById('ocdatste_codpai').value+'&estado='+this.value" )))); } else if ($tipo=='E') { echo select_tag('ocdatste[codmun]', options_for_select($municipio,'001'),array('onChange'=> remote_function(array( 'update' => 'divParroquia', 'url' => 'oycdatsol/combo?par=3', 'with' => "'pais='+document.getElementById('ocdatste_codpai').value+'&estado='+document.getElementById('ocdatste_codedo').value+'&municipio='+this.value" )))); }
Nota: Cabe destacar que el mismo número de combos que contenga el edit form lo debe tener el archivo comboSuccess.php'.
- Luego en el actions.class agregamos la función que controla, que se va a ejecutar con la variable de el control de la acción.
public function executeCombo() { if ($this->getRequestParameter('par')=='1') { $this->estados = $this->Cargarestados($this->getRequestParameter('pais')); $this->tipo='P'; } elseif ($this->getRequestParameter('par')=='2') { $this->municipio = $this->Cargarmunicipio($this->getRequestParameter('pais'),$this->getRequestParameter('estado')); $this->tipo='E'; } }
- Por último, en el _edit_form se coloca el código php que imprime los combos; en cada uno de los campos.
<?php echo select_tag('ocdatste[codpai]', options_for_select($pais,'001'),array('onChange'=> remote_function(array( 'update' => 'divEstados',//Div a Actualizar 'url' => 'oycdatsol/combo?par=1',//Variable para el control de la accion(1) 'with' => "'pais='+this.value"//Valor de la variale de la caja de texto ))));?> </div> <br> //Campo que contiene el estado. <div id="divEstados"> <?php echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=> remote_function(array( 'update' => 'divMunicipios',//Div a Actualizar 'url' => 'oycdatsol/combo?par=2',//Variable para el control de la accion(1) 'with' => "'pais='+document.getElementById('ocdatste_codpai').value+'&estado='+this.value"//Valor de la variale de la caja de texto ))));?></div> </div>
Y listooooooooooooooooooooooo Jsuarez::::....