Uso de HTML_Table_Matrix-1.0.10 para mostrar tablas de datos

Este “package” segun dice la pagina de PEAR sirve para mostrar de mejor forma una amtriz de datos.

Este paquete depende de HTML_Table-1.8.3.

HTML_Table-1.8.3 permite el llenado y la generacion de tablas presentables en HTML, como por ejemplo esta :

Esta tabla es generada con el sgte codigo :


foreach ($res as $res2) {

    foreach ($res2 as $key => $value) {

        if ($key == 0)
            continue;
        if ($key == 1)
            $table->setCellContents($row, 0, $value);
        if ($key == 2)
            $table->setCellContents($row, 1, $value);
        if ($key == 3)
            $table->setCellContents($row, 2, $value);
        if ($key == 4)
            $table->setCellContents($row, 3, $value);
//fecha creacion
        if ($key == 5)
            $table->setCellContents($row, 4, date("d-m-Y", strtotime(substr($value, 0, 10))));
        if ($key == 6)
            continue;
        if ($key == 7)
            continue;
        if ($key == 8)
            $table->setCellContents($row, 5, redondeado($value, 4));
        if ($row % 2 == 0)
            $table->setRowAttributes($row, array("bgcolor" => "#FFF0FF"));
        else
            $table->setRowAttributes($row, array("bgcolor" => "#F2FEFD"));
    }
    $row++;
}

print "<center>" . $table->toHtml() . "</center>";

En esta tabla si te das cuenta, el ancho de cada celda depende de la cantidad de espacio que ocupe el texto de la cabecera de la tabla , por ejemplo :

numero_integrantes solo tendra 1 digito en su columna, pero ocupa todo el texto de la cabecera .

saldo_capital tiene el tamaño justo para albergar un numero con 8 digitos , el punto y 4 decimales, lo cual esta bien .

Pero esta forma de presentar los datos, siempre mostrara una tabla con dimensiones diferente segun el ancho que ocupe cada dato en su respectiva columna.

/—————–Por investigar

Es por eso que utilizare el paquete HTML_Table_Matrix, pues una de sus funcionalidades es la que permite establecer un ancho fijo a cada columna de una tabla.

Este paquete se instala al igual como los otros, con la orden :

pear install -f HTML_Table_Matrix-1.0.10.tgz

/————————————————————————–

Una solucion parcial es usar la funcion str_pad(string,long,ch,tipo) y number_format

$tableX->setCellContents($rowX,7,str_pad(number_format($value,3),14, ‘. ‘,STR_PAD_LEFT));

str : la cadena a dar formato.

long : el tamaño fijo de la cadena de salida

ch : es el caracter con el que se llenara a str desde el lao indicado por “tipo”.

tipo : es el tipo de llenado de caracteres de la cadena , izquierda es STR_PAD_LEFT, derecha es STR_PAD_RIGHT, y ambos lados es STR_PAD_BOTH, por defecto es STR_PAD_RIGHT

Esta funcion tiene una salvedad la cual es que para poder conseguir el efecto de llenado de caracteres por la izquierda , siempre tiene que asignarse un valor a ch, el cual en este ejemplo es el punto : “.” .

La funcion number_format(valor,dec,sep_decim,sep_mil) produce un string con el formato segun los parametros :

valor : es el numero a dar formato.

sep_decim : es el caracter usado para indicar el simbolo de separador de decimales.

sep_mil : es el caracter usado para indicar el simbolo de separador de miles.

En el ejemplo , number_format($value,3) produce 5,385.300

Este fragmento de codigo producira la sgte salida

Solo faltaria quitar los caracteres “.” para asi lograr una alienacion correcta para los numeros con formato .

Otra solucion seria usar solo la funcion number_format e ingresar una alienacion a la derecha por fila a la tabla, lo que seria suficiente , pero los campos fecha_de_Vencimiento, nombre y Apellido tambien se alinearan a la derecha a lo que no se quiere para texto no numerico.

Una solucion mejor es usar la función prinf, que tiene la sgte sintaxis :
printf(formato de parametros, parametros )
Con esta función podemos alinear un valor ademas de darle formato.

Un valor alineado a la derecha :
printf("%s %12.4f ", "Cadena Alineada a la derecha :", 27.452);
Cadena Alineada a la derecha :     27.452

A floating-point number to two decimal places:
printf(‘%.2f’, 27.452);
27.45

Decimal and hexadecimal output:
printf(‘The hex value of %d is %x’, 214, 214);
The hex value of 214 is d6

Padding an integer to three decimal places:
printf(‘Bond. James Bond. %03d.’, 7);
Bond. James Bond. 007.

Formatting a date:
printf(‘%02d/%02d/%04d’, $month, $day, $year);
02/15/2005

A percentage:
printf(‘%.2f%% Complete’, 2.1);
2.10% Complete

Padding a floating-point number:
printf(‘You’ve spent $%5.2f so far’, 4.1);
You’ve spent $ 4.10 so far

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s