Combos de Recargables Dependientes
De CidesaWiki
(Diferencias entre revisiones)
| Línea 175: | Línea 175: | ||
| - | 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::::....