¿Cómo hago para mantener el estado de un ef al cambiar de tab en un ci con dos o más pantallas con tipo de navegación tab horizontal?
Por favor, necesito que me respondan esta pregunta, tengo que resolverlo con urgencia
Matias, podes usar cualquiera de las dos opciones que tenes a continuacion
Estoy usando variables de clase ($s__datos_recibo
y $s__datos_aportes
), en el evento de salida de cada tab (evt__recibo__salida()
y evt__aportes__salida()
) le asigno a estas variables el $this->dep('formulario')->get_datos()
y $this->dep('formulario_ml')->get_datos()
, pero esto lo guarda en la base de datos, o sea que ejecuta evt__formulario__modificacion()
y evt__formulario_ml__modificacion()
y encima no mantiene los valores, le puse ei_arbol($this->s__datos_recibo)
y muestra todos los valores nulos, ¿cómo puedo solucionar este error?
Por favor respondanme esta pregunta, necesito resolverlo cuanto antes.
Por favor, respondanme esta pregunta, estoy estancado con esto y necesito solucionarlo urgente
Matias,
primeramente, que scope tienen definidos esas variables de clase… si son private no te va a funcionar, como minimo deberian ser protected.
Por otro lado, justamente los metodos evt__formulario__modificacion() y evt__formulario_ml__modificacion() reciben directamente del cliente los datos, no hay mejor lugar para asignarlo a dichas variables.
Tene en cuenta que si estas impactando directamente contra la bd en esos metodos las variables de clase pierden parte de su utilidad.
Pasteame el codigo del CI asi te puedo orientar mejor.
Saludos
Este es el código del CI con los formularios en forma de tab horizontal:
<?php
class ci_edicion extends sindicato_ci
{
protected $s__id_empresa;
protected $s__datos_recibo;
protected $s__total;
protected $s__datos_aportes;
function get_relacion()
{
return $this->controlador->get_relacion();
}
//-----------------------------------------------------------------------------------
//---- formulario -------------------------------------------------------------------
//-----------------------------------------------------------------------------------
function ajax__cargar_empresa($parametros, toba_ajax_respuesta $respuesta)
{
$this->s__id_empresa = $parametros['id_empresa'];
}
function conf__formulario(sindicato_ei_formulario $form)
{
if(!empty($this->s__datos_recibo)) $form->set_datos($this->s__datos_recibo);
elseif($this->get_relacion()->tabla("recibos")->esta_cargada())
$form->set_datos($this->get_relacion()->tabla("recibos")->get());
elseif(!empty($this->s__total)) $form->ef('total')->set_estado($this->s__total);
}
function evt__formulario__modificacion($datos)
{
$this->get_relacion()->tabla("recibos")->set($datos);
}
//-----------------------------------------------------------------------------------
//---- Configuraciones --------------------------------------------------------------
//-----------------------------------------------------------------------------------
function evt__recibo__salida()
{
$this->s__datos_recibo = $this->dep('formulario')->get_datos();
}
function evt__aportes__entrada()
{
if(!$this->get_relacion()->esta_cargada() && !empty($this->s__id_empresa)) {
$id_empresa = quote($this->s__id_empresa);
$sql = "select t_ap.id_aporte, t_ap.id_concepto, t_ap.importe from pendientes t_p "
."inner join aportes_pendientes t_ap on t_p.id_pendiente=t_ap.id_pendiente where "
."id_empresa=$id_empresa order by t_ap.id_aporte, t_ap.id_concepto";
$datos = consultar_fuente($sql);
$this->dep('formulario_ml')->set_datos($datos);
}
}
function evt__aportes__salida()
{
$this->s__datos_aportes = $this->dep('formulario_ml')->get_datos();
}
//-----------------------------------------------------------------------------------
//---- formulario_ml ----------------------------------------------------------------
//-----------------------------------------------------------------------------------
function ajax__get_importe($parametros, toba_ajax_respuesta $respuesta)
{
$id_aporte = quote($parametros['id_aporte']);
$id_concepto = quote($parametros['id_concepto']);
$sql = "select importe from aportes_pendientes where id_aporte=$id_aporte and "
."id_concepto=$id_concepto";
$aporte_pendiente = consultar_fuente($sql);
$respuesta->set($aporte_pendiente);
}
function conf__formulario_ml(sindicato_ei_formulario_ml $form_ml)
{
if($this->get_relacion()->esta_cargada())
return $this->get_relacion()->tabla("aportes_recibos")->get_filas(null, true);
elseif(!empty($this->s__datos_aportes))
return $this->s__datos_aportes;
}
function evt__formulario_ml__modificacion($datos)
{
$this->get_relacion()->tabla("aportes_recibos")->procesar_filas($datos);
$this->get_relacion()->sincronizar();
$aportes_recibos = $this->get_relacion()->tabla("aportes_recibos")->get_filas(null, true);
foreach($aportes_recibos as $value)
{
$id_aporte = quote($value['id_aporte']);
$id_concepto = quote($value['id_concepto']);
$importe = $value['importe'];
$sql = "select * from aportes_pendientes where id_aporte = $id_aporte and id_concepto = $id_concepto";
$aporte_pendiente = consultar_fuente($sql);
if(!empty($aporte_pendiente))
{
$id_aporte_pendiente = quote($aporte_pendiente[0]['id_aporte_pendiente']);
$importe_pendiente = $aporte_pendiente[0]['importe'] - $importe;
$sql = !empty($importe_pendiente) ? "update aportes_pendientes set importe = $importe_pendiente "
."where id_aporte_pendiente = $id_aporte_pendiente" : "delete from aportes_pendientes "
."where id_aporte_pendiente = $id_aporte_pendiente";
$cant_ap = ejecutar_fuente($sql);
}
}
$id_empresa = quote($this->s__id_empresa);
$sql = "select p.id_pendiente, p.total, sum(ap.importe) as aporte from pendientes p left join "
."aportes_pendientes ap on p.id_pendiente = ap.id_pendiente where p.id_empresa = $id_empresa "
."group by p.id_pendiente, p.total";
$pendientes = consultar_fuente($sql);
foreach($pendientes as $value)
{
$id_pendiente = quote($value["id_pendiente"]);
$total = $value["total"];
$aporte = $value["aporte"];
$pendiente = $total - $aporte;
$sql_du = !empty($aporte) ? "update pendientes set total = $pendiente where "
."id_pendiente = $id_pendiente" : "delete from pendientes where id_pendiente = $id_pendiente";
$cant_p = ejecutar_fuente($sql_du);
}
}
function evt__formulario_ml__procesar($datos)
{
$this->s__total = 0;
foreach($datos as $value) $this->s__total += $value["importe"];
}
}
?>
Lo que quiero lograr es que cuando paso de tab se vea el estado de los ef, pero es antes de ejecutar el evento evt__formulario__modificacion y evt__formulario_ml__modificacion, en estos dos eventos lo que hago es impactar directamente contra la bd, así que, como vos decis, las variables de clase pierden su utilidad.
Y el scope de las variables de clase es protected así que con eso no hay problema.