Combos de Recargables Dependientes
De CidesaWiki
(Diferencias entre revisiones)
(20 ediciones intermedias no se muestran.) | |||
Línea 1: | Línea 1: | ||
- | *El siguiente código se encuentra en el módulo Obras; forma oycdatsol. Para cargar los combos creamos una función | + | *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. |
<pre> | <pre> | ||
- | public static function Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados) | + | 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; | |
- | + | } | |
</pre> | </pre> | ||
Línea 49: | Línea 49: | ||
</pre> | </pre> | ||
- | + | '''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(): | ||
<pre> | <pre> | ||
+ | public function executeEdit() | ||
+ | { | ||
+ | $this->funciones_combos(); | ||
+ | ... | ||
+ | ... | ||
+ | ... | ||
+ | } | ||
+ | public function updateClaseFromRequest() | ||
+ | { | ||
+ | $this->funciones_combos(); | ||
+ | ... | ||
+ | ... | ||
+ | ... | ||
+ | } | ||
+ | </pre> | ||
+ | |||
+ | <pre> | ||
+ | //En el Action.class | ||
public function funciones_combos() | public function funciones_combos() | ||
{ | { | ||
Línea 71: | Línea 91: | ||
<?php if ($tipo=='P') | <?php if ($tipo=='P') | ||
{ | { | ||
- | echo select_tag('ocdatste[codedo]', options_for_select($estados,' | + | echo select_tag('ocdatste[codedo]', options_for_select($estados,'','include_custom=Seleccione'),array('onChange'=> remote_function(array( |
'update' => 'divMunicipios', | 'update' => 'divMunicipios', | ||
'url' => 'oycdatsol/combo?par=2', | 'url' => 'oycdatsol/combo?par=2', | ||
Línea 79: | Línea 99: | ||
else if ($tipo=='E') | else if ($tipo=='E') | ||
{ | { | ||
- | + | echo select_tag('ocdatste[codmun]', options_for_select($municipio,'','include_custom=Seleccione'),array('onChange'=> remote_function(array( | |
'update' => 'divParroquia', | 'update' => 'divParroquia', | ||
'url' => 'oycdatsol/combo?par=3', | 'url' => 'oycdatsol/combo?par=3', | ||
Línea 88: | Línea 108: | ||
</pre> | </pre> | ||
- | '''Nota:''' Cabe destacar que el mismo número de combos que contenga el edit form lo debe tener el archivo '''comboSuccess.php | + | '''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. |
<pre> | <pre> | ||
Línea 110: | Línea 130: | ||
</pre> | </pre> | ||
- | * | + | *En el archivo editSuccess.php agregar las variables que hace referencia al pais, estados, etc |
<pre> | <pre> | ||
+ | <div id="sf_admin_content"> | ||
+ | <?php include_partial('oycdatsol/edit_form', array('ocdatste' => $ocdatste, 'labels' => $labels, 'desste' => $desste, 'pais' => $pais, 'estados' => $estados)) ?> | ||
+ | </div> | ||
- | <?php echo select_tag('ocdatste[codpai]', options_for_select($pais,' | + | </pre> |
+ | |||
+ | *Por último, en el _edit_form se coloca el código php que imprime los combos; en cada uno de sus respecivos campos. | ||
+ | <pre> | ||
+ | //Campo que contiene el pais. | ||
+ | <?php echo select_tag('ocdatste[codpai]', options_for_select($pais,'','include_custom=Seleccione'),array('onChange'=> remote_function(array( | ||
'update' => 'divEstados',//Div a Actualizar | 'update' => 'divEstados',//Div a Actualizar | ||
'url' => 'oycdatsol/combo?par=1',//Variable para el control de la accion(1) | 'url' => 'oycdatsol/combo?par=1',//Variable para el control de la accion(1) | ||
Línea 123: | Línea 151: | ||
//Campo que contiene el estado. | //Campo que contiene el estado. | ||
<div id="divEstados"> | <div id="divEstados"> | ||
- | <?php echo select_tag('ocdatste[codedo]', options_for_select($estados,' | + | <?php echo select_tag('ocdatste[codedo]', options_for_select($estados,'','include_custom=Seleccione'),array('onChange'=> remote_function(array( |
'update' => 'divMunicipios',//Div a Actualizar | 'update' => 'divMunicipios',//Div a Actualizar | ||
'url' => 'oycdatsol/combo?par=2',//Variable para el control de la accion(1) | 'url' => 'oycdatsol/combo?par=2',//Variable para el control de la accion(1) | ||
Línea 131: | Línea 159: | ||
</pre> | </pre> | ||
+ | |||
+ | == 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: | ||
+ | <pre> | ||
+ | Editar | ||
+ | |---> Funciones_combos() | ||
+ | |---> $this->pais()= $this->Cargarpais(); | ||
+ | |--->CargarCombos() | ||
+ | |---> $this->pais() = 'p' | ||
+ | |||
+ | </pre> | ||
- | Y listooooooooooooooooooooooo | + | Y listooooooooooooooooooooooo a jugar Symfony |
'''Jsuarez::::....''' | '''Jsuarez::::....''' |
Última versión de 19:22 14 jun 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); }
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,'','include_custom=Seleccione'),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,'','include_custom=Seleccione'),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 echo select_tag('ocdatste[codpai]', options_for_select($pais,'','include_custom=Seleccione'),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,'','include_custom=Seleccione'),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 a jugar Symfony
Jsuarez::::....