[Solucionado] Cuadro Seleccion Múltiple Paginado

Hola, estoy trabajando con Toba 1.5.10 y quiero hacer un cuadro que permita una seleccion multiple pero tiene muchas filas y tengo que paginarlo. La seleccion se pierde cuando se avanza en el listado, como puedo hacer para mantenerla? El evento “seleccion” cuando se ejecuta?

Muchas Gracias
Maxi

Hola Maxi,

los elementos seleccionados te llegan al servidor al dispararse el evento multiple. Osea, en PHP podes ir guardando todos los elementos seleccionados por pagina.
Para poder visualizar los seleccionados cuando volves por las paginas, lo que deberias hacer es utilizar un metodo de configuracion del evento.


function conf_evt__elegime_multiple($fila, $evento) {
}

Y luego alli dentro utilizar $evento->set_check_activo(true/false) dependiendo de si el id en cuestion fue seleccionado o no.
La otra forma, es sacando una funcion en JS que utilice el metodo seleccionar del cuadro para volver a seleccionar las filas, las cuales podes sacar en un arreglo.

Saludos

Cual es el evento?

Este es el código del CI

protected $s__filtros;
	protected $s__cargos_renov;
	
	function evt__busqueda_form__filtrar($datos){
		$this->s__filtros = $datos;
		$this->set_pantalla('pant_renovacion');
	}

	function conf__renovacion_cuadro(toba_ei_cuadro $cuadro){
	
		if(isset($this->s__filtros)){
			$datos = toba::consulta_php('consultas')->get_cargos_renovar($this->s__filtros);
			
			$cuadro->set_datos($datos);
			
			ei_arbol($this->s__cargos_renov);
		}
	}
	
	function evt__renovacion_cuadro__seleccion($datos){
		$this->s__cargos_renov = $datos;
	}
	
	function conf_evt__renovacion_cuadro__seleccion(toba_evento_usuario $evento, $fila){
		ei_arbol($fila);
	}

Hola Maxi,

una de las restricciones que tiene el tema de eventos multiples es que justamente no se pueda llamar ‘seleccion’ (es por un tema de compatibilidad hacia atras).
Mas alla de eso no hay restricciones, fijate que en el ejemplo de toba_referencia Seleccion y Ordenamiento Multiple hay 2 eventos multiples y uno justamente se configura en linea.

Saludos

Hola Richard,

Cuando cambio de página, el evento de seleccion multiple no se dispara.

Evento de seleccion multiple

function evt__renovacion_cuadro__selp($datos){
		"selp ".ei_arbol($datos);
	}

Evento cuando cambia la pagina

function evt__renovacion_cuadro__cambiar_pagina($num){
		ei_arbol($num);
		echo "s__cargos_renov : ".ei_arbol($this->s__cargos_renov);		
	}

SI se dispara el evento cuando aprieto un boton que hace una peticion al servidor. Siguiendo el ejemplo del toba_referencia

http://i39.tinypic.com/15dooys.jpg

Ahora estoy probando con ajax

function extender_objeto_js(){
		echo "
			{$this->objeto_js}.evt__renovacion_cuadro__cambiar_pagina = function(){
                var seleccion = this.dep('renovacion_cuadro').get_ids_seleccionados('selp');
				notificacion.agregar(seleccion);
				this.ajax('calcular', seleccion, this, this.actualizar_datos);
				//return false;
			}
			
			{$this->objeto_js}.actualizar_datos = function(datos){
				this.dep('prueba').ef('perro').set_estado(datos[0]);
			}   	
		
		";
    }
	
	function ajax__calcular($parametros, toba_ajax_respuesta $respuesta){
		$this->s__cargos_renov = $parametros;
		$respuesta->set($parametros);
	}

Pero la variable $this->s__cargos_renov solo me la actualiza con los valores si el return false; no esta comentado, pero si no lo comento no me cambia de pagina porque interrumpe esa accion. Sigo trabado con lo mismo.

Saludos

Maxi

Hola Maxi,

efectivamente los eventos no se disparan con el cambio de pagina… ni los multiples, ni ningun otro, el cambio de pagina es solo eso… el servidor no espera nada mas alla del nro al cual cambiar cuando se trata de un cambio de pagina. Disculpa, pense que se trataba de un evento comun… pero veo que se esta tomando como un caso especial en el codigo.

Para cambiar este comportamiento, deberias hacerte una subclase del toba_ei_cuadro y redefinir el comportamiento en el metodo disparar_eventos.
De dicha forma podrias hacer que ademas de procesar el cambio de pagina se evaluen los eventos multiples.

Saludos

Richard, pude hacer lo que me dijiste! Te cuento como quedo:

Extendí el cuadro y volví a definir el método [shadow=red,left]disparar_eventos()[/shadow] para que cuando se cambia la página dispare también el de seleccion múltiple.

En el php del ci:

Defino 2 variables de sesión

protected $s__valores = array();
protected $s__pagina; #numero de la pagina actual del cuadro

En el conf del cuadro guardo la primer página

$this->s__pagina = $this->dep('cuadro')->get_pagina_actual();

Función que dispara el evento múltiple selp

function evt__cuadro__selp($datos){
		
		unset($this->s__valores[$this->s__pagina]); #elimino los registros anteriores
		
		if(!(empty($datos))){
			foreach($datos as $nro){
				$this->s__valores[$this->s__pagina][$nro['nro_cargo']] = '';
			}
			$this->s__pagina = $this->dep('cuadro')->get_pagina_actual();
		}
	}

Función que configura el evento (es para marcar los checked)

function conf_evt__cuadro__selp(toba_evento_usuario $evento, $fila){
		$clave = $this->dep('cuadro')->get_clave_fila_array($fila);
		if(isset($this->s__valores[$this->s__pagina][$clave['nro_cargo']])){
			$evento->set_check_activo(true);
		}else{$evento->set_check_activo(false);}
	}

Muchas gracias!
Maxi