Inicialización form-ML con valores desde un formulario [SOLUCIONADO]

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.


ef_cargo.png

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