Hola!
Quiero hacer lo siguiente, un formulario donde se seleccionan unos datos, y de ahí un ML con varios efs, de los cuales los 2 primeros deberían inicializarse en cascada con valores seleccionados en el primer fomulario.
Para poder llevar los valores, están en el mismo CI, en distintas pantallas.
Cree ef_ocultos que reciben esos valores, y se asignan en cada nueva fila creada sin problema (lo hago en el crear_fila).
El tema es que al ser ef_ocultos, no me afectan las cascadas.
En que puedo estar errándole?
La version de toba que utilizo es 2.3.4.
El codigo js que tengo en el crear_fila es:
cantidad_filas = {$this->objeto_js}.filas().length;
{$this->objeto_js}.crear_fila_orig = {$this->objeto_js}.crear_fila;
{$this->objeto_js}.crear_fila = function() {
cantidad_filas++;
id_filas = this.crear_fila_orig();
var filas = this.filas()
for (id_fila in filas) {
if (this.ef('id_sede').ir_a_fila(filas[id_fila]).tiene_estado()){
sede= this.ef('id_sede').ir_a_fila(filas[id_fila]).get_estado();
}
if (this.ef('id_anio').ir_a_fila(filas[id_fila]).tiene_estado()){
anio= this.ef('id_anio').ir_a_fila(filas[id_fila]).get_estado();
}
if (this.ef('id_periodo_academico').ir_a_fila(filas[id_fila]).tiene_estado()){
periodo= this.ef('id_periodo_academico').ir_a_fila(filas[id_fila]).get_estado();
}
this.seleccionar(filas[id_fila]);
}
this.ef('id_sede').ir_a_fila(id_filas).set_estado(sede);
this.ef('id_anio').ir_a_fila(id_filas).set_estado(anio);
this.ef('id_periodo_academico').ir_a_fila(id_filas).set_estado(periodo);
return id_fila;
}
De esta forma sin poner los efs como ocultos funciona, ya que obtiene los valores de la primera linea, que se asignan al inicializar el formulario ml.
Pero la idea seria que los efs sean ocultos.
Hola Martin,
si los formularios estan en distintas pantallas, para cuando llegas a la carga de valores de los combos ya tenes dichos valores en el CI, simplemente hace que el metodo que devuelve los valores para la cascada los utilice, no es necesario que vayas a JS con campos ocultos, ya tenes dichos valores en PHP.
De esa forma, la fila modelo para el ML deberia ir cargada con las opciones correctas basicas de acuerdo al form de la pantalla anterior, luego se modificaran segun lo que elijas en el propio formulario.
Si te entendi mal corregime… pero me parece que te estas complicando un poco la vida de gusto.
Saludos
Si, la recomendación está correcta, pero a ver si entiendo…
Porque originalmente quise hacer que el formulario al cargar valores, seteara por defecto esos ef_ocultos, y no anduvo tampoco.
Vos lo que me indicás es que simule la cascada? es decir, que la función que devuelve los valores de los combos sea definida directamente en el CI y use esos valores. Es decir, que en realidad no sea una cascada, sino un combo normal que tome valores de esa función que se calcule basándose en los valores de los datos del formulario.
Hola Martin,
en efecto, las cascadas existen dentro de un mismo formulario unicamente, el resto de las interacciones de ese tipo deben realizarse mediante intervencion del CI que los contiene.
Vos necesitas que ese combo tome valores filtrados por un formulario que esta en otra pantalla directamente, no hay manera de hacer una cascada ahi, salvo que utilices los valores directamente en el CI.
Saludos
Por lo que entendi lo que hice fue eliminar la cascada y definir en el ci el metodo que utilizaba sin parametros y asigne en la consulta las variables de sesion con los valores obtenidos de otra pantalla.
El codigo de la funcion me quedo de la siguente forma:
function obtener_funcion(){
$sql = "SELECT DISTINCT COALESCE(fct.abreviatura, fct.nombre) AS cargo
FROM cargos_funciones.docentes_funciones df
INNER JOIN docentes.docentes d ON (df.id_docente = d.id)
INNER JOIN cargos_funciones.funciones_tipos fct ON (df.id_funcion_tipo = fct.id)
INNER JOIN cargos_funciones.comisiones co ON (df.id_comision = co.id)
LEFT JOIN cargos_funciones.docentes_cargos dcg ON (df.id_docente_cargo = dcg.id)
LEFT JOIN cargos_funciones.docentes_contratos dct ON (df.id_docente_contrato = dct.id)
WHERE co.id =". $this->s__id_comision ."AND d.id=".$this->s__id_docente ;
$rs = toba::db()->consultar($sql);
if (! empty ( $rs )) {
return $rs [0] ['cargo'];
}
}
El problema que tengo ahora es que me salta este error: Fatal error: Using $this when not in object context in D:.… donde la linea del error es donde se encuentran las variables.
Adjunto laimagen del ef en el formulario ml y el codogo del ci completo.
ci_carga_datos_anteriores.txt (8.26 KB)
Hola Martin,
el detalle es el siguiente, veo que en la configuracion del EF, elegiste que la informacion se cargue desde una clase ‘estatica’… eso significa que el metodo se va a llamar estaticamente y por tanto no puede tener referencias a un objeto.
Lo que deberias haber seleccionado para que se llame dinamicamente, es la opcion que dice ‘ci controlador’… que hace referencia al CI donde se encuentra el formulario, en ese caso si es valido que utilices referencias dinamicas a las variables de clase.
Por otro lado, metele un quote a esos valores… asi como estan podrian ser utilizables para realizar un SQL Injection.
Saludos