Combos de Recargables Dependientes
De CidesaWiki
(Diferencias entre revisiones)
Línea 110: | Línea 110: | ||
</pre> | </pre> | ||
- | *Por último, en el _edit_form se coloca el código php que imprime los combos; en cada uno de | + | *Por último, en el _edit_form se coloca el código php que imprime los combos; en cada uno de sus respecivos campos. |
<pre> | <pre> | ||
//Campo que contiene el pais. | //Campo que contiene el pais. |
Revisión de 21:08 30 abr 2007
- 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).');'); } } 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); }
- En el mismo actions.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.
- Además en el actions.class agregamos la función que valida, 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 sus respecivos campos.
//Campo que contiene el pais. <?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::::....