[SOLUCIONADO] Cuadro con cortes y seleccion multiple por corte

hola comunidad !!

Estoy tratando de hacer que la selección múltiple pero que tenga en cuenta el corte de control.

Estoy usando toba 3.0.25 sobre Apache/2.4.29 (Win64) OpenSSL/1.0.2m PHP/7.2.5

Como base tomé el desarrollo de Sergio Vier (ver http://foro.comunidad.siu.edu.ar/index.php?topic=5196.msg21008 ) y no encontré nada más en el foro como para guiarme.

Basicamente no se como detectar el corte o que filas están comprendidas en cada corte …

Gracias y saludos cordiales!!!

Hola Oscar,

Un “todos/ninguno” por cabecera de corte?.. o entendi mal?

Basicamente no se como detectar el corte o que filas están comprendidas en cada corte ...
Hay dos opciones que se me vienen a la cabeza:
  • Una opcion es hacer que cada corte tenga un evento multiple distinto, vas a tener que extender el cuadro para esto… pero casi no tocas la parte de JS y podes llamar al metodo seleccionar_todos y deseleccionar_todos pasandole el evento nomas.

  • Otra opcion es sacar el rango de filas desde el servidor, es el unico lugar donde sabes todas las filas que tiene ese corte… entonces en el link que dispara la interaccion podes incorporar los extremos del rango y luego ciclar llamando a la API del cuadro.

Otra cosa involucraria que empieces a navegar por el DOM, lo que te traeria despiole si cambias el marcado.

Saludos

Un "todos/ninguno" por cabecera de corte?.. o entendi mal?
[b]Exantamente eso!!![/b]

Estoy tratando de generar un id de evento para cada corte de control y me falta identificar el corte en el que esta incluida la fila a la que le voy a generar el evento.
Quizás no sea la mejor forma de encarlo, la idea es ponerle el como sufijo del metodo el id del cc
Pensaba hacerlo acá:


<?php
class weme_ei_cuadro_salida_html extends toba_ei_cuadro_salida_html
{

	protectec $_corte_control;
	


	function html_cuadro_cabecera_columna_evento($rowspan, $pre_columnas)
	{

		//-- Eventos sobre fila
		if($this->_cuadro->cant_eventos_sobre_fila() > 0) {
			foreach ($this->_cuadro->get_eventos_sobre_fila() as $evento) {
				
				$etiqueta = $evento->get_etiqueta() .'-'.$this>_corte_control ;   /// aca iría el identificador de cc
			 	
				//$imagen = $evento->get_imagen();
 .... 

No se si estoy bien orientado, escucho sugerencias
Gracias

Hola Oscar,

bien, acordate que tenes que tener un evento en botonera para poder comunicar los resultados al servidor.

Quizás no sea la mejor forma de encarlo, la idea es ponerle el como sufijo del metodo el id del cc Pensaba hacerlo acá:

<?php
class weme_ei_cuadro_salida_html extends toba_ei_cuadro_salida_html
{

	protectec $_corte_control;
	


	function html_cuadro_cabecera_columna_evento($rowspan, $pre_columnas)
	{

		//-- Eventos sobre fila
		if($this->_cuadro->cant_eventos_sobre_fila() > 0) {
			foreach ($this->_cuadro->get_eventos_sobre_fila() as $evento) {
				
				$etiqueta = $evento->get_etiqueta() .'-'.$this>_corte_control ;   /// aca iría el identificador de cc
			 	
				//$imagen = $evento->get_imagen();
 .... 

Segun veo, esto va a ciclar por los eventos que tengas definidos en el editor... pero fijate que con 2 cortes de control podes tener estas dos situaciones, segun las columnas que elijas y los valores que vengan en los datos.

* Corte id 0
   * Corte id 1
* Corte id 0 
  * Corte id 1


* Corte id 0
   * Corte id 1
   * Corte id 1
   * Corte id 1
* Corte id 0 
  * Corte id 1

Pensa en los cortes de control como agrupadores, vos tendrias que ser capaz de sacar un boton que tome todos los hijos del nodo actual (sea cual sea) y le cambie el status , parte la podes hacer por DOM… parte es simplemente llamar a la API una vez tenes el id de la fila en cuestion.

Saludos

Bueno después de marearme en las clases de toba, busqué una alternativa por el lado de javascrip y funcionó bien!!!

En el cuadro, en la etiqueta paso el nombre del evento y el objecto check a la funcion:

<div align='center'>Selecciona<input type='checkbox' onclick='seleccion_total("cabezas",this)' /></div>

Extendí el cuadro de la siguiente forma :


function extender_objeto_js()
	{
		echo "
		function seleccion_total(evento, checked)
		{
			//alert($this->_info_cuadro_cortes.length ) ;
			//alert(checked);

			// si tiene cortes de control lo manejo con jquery 
			if ($this->_info_cuadro_cortes.length > 0) {
				var id_padre = $(checked).parents('table')[1]['id'];
				
				//alert(id_padre);

            	var valor = $(checked).prop('checked') ;
	            var selector = '#' + id_padre + ' input[id$='+evento+']';
            	
            	//alert(selector);
	            
	            $(selector).each(function( index ){
	                $(this).prop('checked', valor);
            	});	

			}else{
				
				// si no lo maneja toba como siempre
				if (!checked) {
					{$this->objeto_js}.deseleccionar_todos(evento);
				} else {
					{$this->objeto_js}.seleccionar_todos(evento);
				}
			}
		};";
	}

Hola Oscar,

Fijate que te comente una linea puntual del codigo, ese condicional te va a traer problemas asi como esta.
Por lo pronto pareciera que esa expresion… siempre ingresa al condicional, quizas es mas sencillo sacar ese JS unicamente cuando existen CC, ya que la cabecera no deberia salir si no estan los mismos.

Saludos

Fijate que te comente una linea puntual del codigo, ese condicional te va a traer problemas asi como esta. Por lo pronto pareciera que esa expresion... siempre ingresa al condicional, quizas es mas sencillo sacar ese JS unicamente cuando existen CC, ya que la cabecera no deberia salir si no estan los mismos.

Richard: seguí tus comentarios y modifiqué el código, lo probé con cortes y sin cortes y parece que va bien!!
Quedó asi:


function extender_objeto_js()
	{
		echo '
		function seleccion_total(evento, check)
		{	
			var id_padre = $(check).parents("table")[1]["id"];
			var valor = $(check).prop("checked") ;
			var selector = "#" + id_padre + " input[id$="+evento+"]";
			
			$(selector).each(function( index ){
				$(this).prop("checked", valor);
			});
		};';
	}

Gracias !!!