Como lograr un efecto negrita u otra forma en una linea de cuadro

La opcion mas sencilla me parece que es extendiendo la salida html para generar el layout de la fila vos.
De esa manera tenes pleno control para poder fijarle un estilo particular a cada celda de la fila, segun hayas determinado que le corresponda, no te recomiendo que envies codigo HTML como valor de la fila porque despues vas a tener inconvenientes cuando hagas exportaciones a otros formatos.

Saludos

OK. Muchas gracias. Pruebo

Hola, por favor indiquenme si voy bien.
Extendi el cuadro como me sugirieron y genere la funcion , me quedo asi

<?php class cuadro_listado extends spb_ei_cuadro { function generar_layout() { $this->generar_html_ef('numero_patrimonial'); $this->generar_html_ef('descripcion_bien'); $this->generar_html_ef('numero'); } } ?>

pero no se con que comando generar el efecto o negrita en cada ef
o bien, hacer toda la fila de un color
Gracias

Hola Olga,
para generar un efecto distinto o cambiar de alguna manera la visualizacion, tenes que redefinir parte del HTML que saca Toba.

Esta bien que redefinas el metodo y hagas las llamadas que venis haciendo… pero fijate que en la version original de ese metodo hay mucho mas, ese “relleno” es lo que vos deberías ir tocando para lograr lo que deseas.

Otro tema, no se en que version de Toba estas haciendo esto… pero tene en cuenta que si redefinis el layout para el cuadro en gral, lo vas a estar haciendo tambien para las distintas salidas (pdf, excel, etc) con lo cual si metes codigo html, puede que en alguna exportacion eso no se interprete y se vea como texto en el listado.

Para modificar solo la visualizacion en el browser, te recomiendo que extiendas de toba_ei_cuadro_salida_html (si es que estas en la version 2.4+).

Saludos

Hola Richard, tengo el mismo inconveniente que Olga. No logro entender aún cómo extender de toba_ei_cuadro_salida_html, usando la función generar_layout_fila.
Tendrías algún ejemplo como para guiarme?

Saludos

Exactamente eso me pasa … que bueno Pablo que puedes entenderme ja.
Estuve leyendo y tengo una idea, pero no se como estructurar estos conceptos … si nos pudieran ampliar gracias

Olga,

contame que estuviste leyendo hasta ahora asi puedo orientarte mejor, como es que lo harias vos si tuvieras que extender la salida_html nomas?.
Te puedo ayudar a estructurar los conceptos… pero necesito saber cuales son, para ver si hay alguno que necesite corrección o un enfoque distinto.

Pablo, creo que se estan mezclando dos cosas distintas:

  • Como hacer que toba use el codigo que hiciste
  • Como redefinir un metodo en una clase que hereda de otra

Para el primer caso te puedo orientar, incluso pasarte el link a la documentacion del metodo que deberias usar… para lo segundo no puedo hacerte un ejemplo.
La gran ventaja es que tenes el codigo fuente a mano, ningun metodo es una caja negra y podes ver exactamente que hace y como deberías modificarlo (a ese u otros metodos) para lograr lo que queres.

Saludos

Hola Ricardo, te comento, y retomando. Tengo un cuadro, con corte de control, en el que figuran los bienes prestados. La idea es que en el cuadro se muestre de manera separada o sobresaltada los bienes que no fueron devueltos y ya pasaron la fecha prevista de devolucion de aquellos que no fueron devueltos pero no estan vencidos en su plazo de devolución. A esto lo solucione con el corte de control.
El tema es, yo quisiera sobresaltar los bienes vencido con algún tipo de efecto especial (nada sofisticado) como color negrito o rojo a la fila o bien un pintado a toda la fila.
Buscando en toba-referencia, encontre en cuadro corte de control que de manera simple consigue personalizar un poquito la salida visual(ni siquiera me interesa la salida pdf o excel)
Como lo hace el toba-referencia:
extiende el cuadro a un extension_cuadro_xx extended toba_ei_cuadro (Esto definido como extension desde el cuadro en el editor toba)
y utiliza las funciones
function html_pie_cc_contenido__zona(&$nodo)
{
//Preparo una descripcion
$escapador = toba::escaper();
$zona = $escapador->escapeHtml($nodo[‘descripcion’][‘zona’]);
$locs = count($nodo[‘filas’]);
$deps = count($nodo[‘hijos’]);
echo "La Zona $zona tiene $deps
departamentos y $locs localidades.
";
//Hago unos calculos
$habitantes = 0;
foreach ($nodo[‘filas’] as $fila) {
$habitantes += $this->datos[$fila][‘hab_total’];
}
$promedio = $escapador->escapeHtml($habitantes / count($nodo[‘filas’]));
//$resultado = number_format($promedio, 2, ‘,’, ‘.’);
echo “El promedio de habitantes por localidad es: $promedio.”;
}

Yo trato de hacer lo mismo y solo coloco el echo para probar que lo lee y no me funciona
yo hice → extension_cuadro_listado extended spb_ei_cuadro con la funcion
extension_cuadro_listado.php
funcion —> function pdf_pie_cc_cabecera__periodo_prestamo(&$nodo)
{
echo “El promedio de habitantes por localidad es: .”;
}
periodo_prestamo es el campo del corte de control

Hola Richard, gracias por responder. Me sería de gran ayuda el link que me mencionaste.

Saludos

Hola Olga,

el tema es que si queres trabajar la fila para ponerle un estilo distinto por ejemplo, tenes que trabajar el cuerpo del cuadro, no el corte de control especificamente.
La operación que mencionas está buena porque muestra como hacer para agregar info extra a cada corte de control, inclusive sumarizaciones u algo de corte mas estadistico.
Pero ahi no estas modificando el cuerpo del cuadro, sino que implementas ventanas especificas que ya existen a tal fin y que tal vez no son demasiado conocidas.
Mas allá de eso, la lógica no esta mal… solo tendrías que elegir otros metodos para redefinir.

Como lo hace el toba-referencia: extiende el cuadro a un extension_cuadro_xx extended toba_ei_cuadro (Esto definido como extension desde el cuadro en el editor toba) y utiliza las funciones function html_pie_cc_contenido__zona(&$nodo) { //Preparo una descripcion $escapador = toba::escaper(); //$resultado = number_format($promedio, 2, ',', '.'); echo "El promedio de habitantes por localidad es: $promedio."; . . . }
Bien, esa es la manera tradicional de extender un componente en Toba. A partir de la version 2.1, se separo las salidas del cuadro en varias clases, por un lado para darle legibilidad al codigo, para poder tener mas granularidad en la generación (redefinis codigo mas acotado), brindar la posibilidad de agregar salidas nuevas que no tuvieramos implementadas nosotros y finalmente porque de la manera en que estaba generaba subclases satanicas cuando se querian cosas puntuales para varias salidas distintas.

Lo que se hizo entonces, es armar una clase toba_ei_cuadro_salida_xx para cada una de las salidas (html, pdf, excel, impresion_html, etc), esas subclases se instancian en runtime y se usan normalmente, salvo que se indique explicitamente que se debe usar una clase particular distinta. Si te tengo que recomendar algo, es que sigas este camino ya que tenes todos los metodos que hacen los echos en un solo lugar, rastrearlos desde la clase principal del cuadro es mas complicado. Si vas por aca, fijate que en la referencia de la API del cuadro esta el metodo ‘set_manejador_salida’ con el cual le especificas que clase queres que use.

Yo trato de hacer lo mismo y solo coloco el echo para probar que lo lee y no me funciona yo hice -> extension_cuadro_listado extended spb_ei_cuadro con la funcion extension_cuadro_listado.php funcion ---> function pdf_pie_cc_cabecera__periodo_prestamo(&$nodo) { echo "El promedio de habitantes por localidad es: ."; } periodo_prestamo es el campo del corte de control
Ok.. pero fijate que ese metodo va a llamarse unicamente con la salida pdf y en ese caso no podes hacer un echo, sino que tenes que usar el objeto $this->salida para poder modificar algo. Cambiale el pdf --> html y proba, igual como te decia.. eso solo te va a afectar el CC.

Saludos

Hola Pablo,

te dejo el link al metodo que usarías para indicarle a Toba que clase utilizar.

Saludos

Hola Ricardo, finalmente logre que me funcione la estructura. Pero del modo tradicional, le cambie html, igual como vos me indicaste las funciones que estaba utilizando se ve que se interponian y no me muestran nada, probe con la de sumarizar_cc y me funciono
Ahora la pregunta es. Yo quiero utilizar la funcion generar_layout_fila() que depende de toba_ei_cuadro_salida_html.
Hice como indicaste

1)Crear, o en mi caso modificar el archivo .php con extension toba_ei_cuadro_salida o toba_ei_cuadro_salida_html
2)En el conf del cuadro en cuestion le agregue $cuadro->set_manejador_salida(‘html’, ‘nombre de la clase que cree en el punto 1’);

y se me queda toda la pantalla en blanco
Muchas gracias por tu tiempo

Hola Olga,

si te queda la pantalla en blanco, tiene pinta de ser un fatal, ya sea porque no encontro la clase (acordate de registrarla en el autoload o hacer el include necesario en el CI), porque hay algun error de sintaxis o porque no tiene permisos apache para abrir el archivo, etc.
Fijate en el log de errores de Apache que ahi seguro dice que fue lo que lo provoco.

Otra opcion, si renombraste la subclase que tenias para el cuadro, quizas te este quedando alguna llamada a un metodo de la clase cuadro, recorda que ahora no estas extendiendo de la misma clase, eso va a palmar. Dentro de las clases de “salida” hay una variable que referencia al objeto cuadro, por si necesitas llamar a uno de sus metodos.

Saludos

Buenas Tardes estimados:
leyendo el hilo pude resolver pintar filas segun el valor de algunos de los datos que se cargan en el cuadro. Dejo los pasos a seguir
Se debe extender la clase toba_ei_cuadro_salida_html en mi caso hice


<?php
class ei_cuadro_viaticos_salida_html  extends toba_ei_cuadro_salida_html
}
?>
{

Dentro de esta clase sobreescribi el metodo html_cuadro


<?php

class ei_cuadro_viaticos_salida_html extends toba_ei_cuadro_salida_html
{
	//-------------------------------------------------------------------------------
	//-- Generacion del CUADRO
	//-------------------------------------------------------------------------------

	/**
	 * Genera el html correspondiente a las filas del cuadro
	 */
	function html_cuadro(&$filas)
	{
		//Si existen cortes de control y el layout es tabular, el encabezado de la tabla ya se genero
		if( ! $this->_cuadro->tabla_datos_es_general() ){
			$this->html_cuadro_inicio();
		}
		//-- Se puede por api cambiar a que los titulos de las columnas se muestren antes que los cortes, en ese caso se evita hacerlo aqui
		if (! $this->_cuadro->debe_mostrar_titulos_columnas_cc()) {
			$this->html_cuadro_cabecera_columnas();
		}
		$par = false;
		$formateo = $this->_cuadro->get_instancia_clase_formateo('html');
		$layout_cant_columnas = $this->_cuadro->get_layout_cant_columnas();
		$i = 0;
		if (!is_null($layout_cant_columnas)) {
			echo "<tr>";
		}

		$columnas = $this->_cuadro->get_columnas();
		$datos = $this->_cuadro->get_datos();

		$objeto_js = $this->_cuadro->get_id_objeto_js();
		$evt_multiples = $this->_cuadro->get_eventos_multiples();

		foreach($filas as $f)
		{
			if (!is_null($layout_cant_columnas) && ($i % $layout_cant_columnas == 0)) {
				$ancho = floor(100 / (count($filas) / $layout_cant_columnas));
				echo "<td><table class='ei-cuadro-agrupador-filas' width='$ancho%' >";
			}
			$estilo_fila = $par ? 'ei-cuadro-celda-par' : 'ei-cuadro-celda-impar';
			$clave_fila = $this->_cuadro->get_clave_fila($f);
			
			//Recorro el array de datos para identificar en mi caso que fila excede el total_dispnible de 15
			//Este dato no lo seteo en el cuadro pero si lo traigo desde mi consulta en el dao
			//
			$claves = array();
			for ($i = 0; $i < count($datos); $i++) 
			{
				if ($datos[$i]['total_disponible']>=15)
				{
					$claves[] = $i;
				}	  
			}
			
			//Una vez que tengo las claves de fila que debo pintar
			// busco si la fila en la que estoy parado tengo q pintar y cambio el estilo 
			if (in_array($clave_fila, $claves)) 
			{
				$estilo_fila = 'ei-cuadro-celda-roja';
			}
			
			//Genero el html de la fila, junto con sus eventos y vinculos
			$this->generar_layout_fila($columnas, $datos, $f, $clave_fila, $evt_multiples, $objeto_js, $estilo_fila, $formateo);
			$par = !$par;
			if (isset($layout_cant_columnas) && $i % $layout_cant_columnas == $layout_cant_columnas-1) {
				echo "</table></td>";
			}
			$i++;
		}
		
		if (isset($layout_cant_columnas)) {
			echo "</tr>";
		}
		if( ! $this->_cuadro->tabla_datos_es_general() ){
			$this->html_acumulador_usuario();
			$this->html_cuadro_fin();
		}
	}
}
?>

Luego en el con del cuadro seteo el manejador de salida con


function conf__cuadro(sicd_ei_cuadro $cuadro)
{
	$cuadro->set_manejador_salida('html', 'ei_cuadro_viaticos_salida_html');

}

hay que hacer require a la clase extendida dentro del ci


<?php
require_once('persona/ei_cuadro_viaticos_salida_html.php');
class ci_viaticos extends sicd_ci
{
}
?>

En el skin que manejen deben agregar la directiva css con el color que quieran, en mi caso


.ei-cuadro-celda-roja {
	background-color:#ea2727;
}

Espero les sirva.
Saludos

Hola Gustavo,

gracias por compartir el código, tendría que tener un boton de like el foro, asi te van agradeciendo.

Saludos

Hola!! estoy siguiendo los pasos que realizó Gustavo pero me encuentro con el siguiente error:

Argument 1 passed to toba_ei_cuadro_salida::__construct() must be an instance of toba_ei_cuadro, array given, called in /var/local/presupuesto/vendor/siu-toba/framework/php/nucleo/componentes/toba_constructor.php on line 77

No entiendo en qué momento estoy llamando al constructor o como debo solucionarlo. Estoy siguiendo exactamente los mismos pasos. Desde ya muchas gracias. Saludos

Buen dia Mariano:
ese código lo escribí en toba 2.7, recién hice lo mismo en toba 3.1 y funciono correctamente.
Que versión de toba estas usando? podrías compartir el código que escribiste?
Saludos

Buen día Gustavo!! muchas gracias por la respuesta. Te adjunto los fragmentos del código.

El siguiente es el ci en el cual se encuentra el cuadro que queremos modificar


<?php

require_once('estilo/estilo_cuadro.php');

class ci_resultado extends presupuesto_ci
{
	function conf__resultado(toba_ei_cuadro $cuadro)
	{
		$cuadro->set_datos($this->getResultadoEscenario()); //getResultadoEscenario obtiene los datos del cuadro
		$cuadro->set_manejador_salida('html', 'estilo_cuadro');
	}
}

?>

El siguiente es la nueva clase que por ahora el método html_cuadro está sin modificar


<?php
class estilo_cuadro extends toba_ei_cuadro_salida_html
{
    function html_cuadro(&$filas)
	{
		//Si existen cortes de control y el layout es tabular, el encabezado de la tabla ya se genero
		if( ! $this->_cuadro->tabla_datos_es_general() ){
			$this->html_cuadro_inicio();
		}
		//-- Se puede por api cambiar a que los titulos de las columnas se muestren antes que los cortes, en ese caso se evita hacerlo aqui
		if (! $this->_cuadro->debe_mostrar_titulos_columnas_cc()) {
			$this->html_cuadro_cabecera_columnas();
		}
		$par = false;
		$formateo = $this->_cuadro->get_instancia_clase_formateo('html');
		$layout_cant_columnas = $this->_cuadro->get_layout_cant_columnas();
		$i = 0;
		if (!is_null($layout_cant_columnas)) {
			echo "<tr>";
		}

		$columnas = $this->_cuadro->get_columnas();
		$datos = $this->_cuadro->get_datos();

		$objeto_js = $this->_cuadro->get_id_objeto_js();
		$evt_multiples = $this->_cuadro->get_eventos_multiples();

		foreach($filas as $f)
		{
			if (!is_null($layout_cant_columnas) && ($i % $layout_cant_columnas == 0)) {
				$ancho = floor(100 / (count($filas) / $layout_cant_columnas));
				echo "<td><table class='ei-cuadro-agrupador-filas' width='$ancho%' >";
			}
			$estilo_fila = $par ? 'ei-cuadro-celda-par' : 'ei-cuadro-celda-impar';
			$clave_fila = $this->_cuadro->get_clave_fila($f);
			
			//Recorro el array de datos para identificar en mi caso que fila excede el total_dispnible de 15
			//Este dato no lo seteo en el cuadro pero si lo traigo desde mi consulta en el dao
			//
			$claves = array();
			for ($i = 0; $i < count($datos); $i++) 
			{
				if ($datos[$i]['total_disponible']>=15)
				{
					$claves[] = $i;
				}	  
			}
			
			//Una vez que tengo las claves de fila que debo pintar
			// busco si la fila en la que estoy parado tengo q pintar y cambio el estilo 
			if (in_array($clave_fila, $claves)) 
			{
				$estilo_fila = 'ei-cuadro-celda-roja';
			}
			
			//Genero el html de la fila, junto con sus eventos y vinculos
			$this->generar_layout_fila($columnas, $datos, $f, $clave_fila, $evt_multiples, $objeto_js, $estilo_fila, $formateo);
			$par = !$par;
			if (isset($layout_cant_columnas) && $i % $layout_cant_columnas == $layout_cant_columnas-1) {
				echo "</table></td>";
			}
			$i++;
		}
		
		if (isset($layout_cant_columnas)) {
			echo "</tr>";
		}
		if( ! $this->_cuadro->tabla_datos_es_general() ){
			$this->html_acumulador_usuario();
			$this->html_cuadro_fin();
		}
	}
}

?>

Además desde el editor hacemos que el cuadro extienda dicho archivo.

La versión del toba es 3.1.5

Además desde el editor hacemos que el cuadro extienda dicho archivo. → este es tu error
Se setea el manejador de salida con “estilo_cuadro” unicamente. Este archivo no es una extensión de tu cuadro.

Saludos

Muchas gracias. Logramos hacer funcionar el código.

Ahora nuestra intención es cambiar sólo algunas columnas de cada fila según un determinado valor, con lo que entendemos debemos redefinir el comportamiento de generar_layout_fila().

Ya tenemos por donde seguir, nuevamente muchas gracias. Saludos