Combos de Recargables Dependientes
De CidesaWiki
Revisión a fecha de 13:02 9 may 2007; Ingjjsg (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).');'); } } 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); }
Nota: 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.
- Hacemos el llamdo de la funcion de funciones_combos en la executeEdit() y en updateClaseFromRequest():
public function executeEdit() { $this->funciones_combos(); ... ... ... } public function updateClaseFromRequest() { $this->funciones_combos(); ... ... ... }
//En el Action.class 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'; } }
- En el archivo editSuccess.php agregar las variables que hace referencia al pais, estados, etc
<div id="sf_admin_content"> <?php include_partial('oycdatsol/edit_form', array('ocdatste' => $ocdatste, 'labels' => $labels, 'desste' => $desste, 'pais' => $pais, 'estados' => $estados)) ?> </div>
- 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 $pais['S'] = 'Seleccione'; if ($ocdatste->getCodpai()) $var=''; else $var='S'; ?> <?php echo select_tag('ocdatste[codpai]', options_for_select($pais,$var),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 $estados['S'] = 'Seleccione'; if ($ocdatste->getCodedo()) $var=''; else $var='S'; ?> <?php echo select_tag('ocdatste[codedo]', options_for_select($estados,$var),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>
Esquema
- Ahora se va a mostrar un esquema sistemático de como trabaja la función para llenar el combo en todo el proceso:
- Al editar un dato se realiza una serie de llamados a las funciones, que se muestra a continuación:
Editar |---> Funciones_combos() |---> $this->pais()= $this->Cargarpais(); |--->CargarCombos() |---> $this->pais() = 'p'
Y listooooooooooooooooooooooo
Jsuarez::::....