¿Cómo formatear una tabla en Drupal con theme table?

Puede ser que necesitemos construir una tabla formateada para alguna de nuestras páginas o módulos de Drupal, para ello, el sistema de theming nos permite mostrar tablas configurables a través del theme_table. Para ello, necesitamos una consulta, en el ejemplo muestro todos los usuarios de la aplicación , y sus fechas de creación y último ingreso. Para mostrar la cabecera y habilitar la ordenación en las columnas, cargamos el array $header, al que le pasamos data, que será el texto de cabecera de la columna, field, que será el nombre de la columna recuperada en la consulta (se requiere si se necesita realizar una ordenación), y opcionalmente sort, que será asc o desc, según necesitemos que esté ordenada la tabla por defecto. También le podremos pasar los atributos HTML que queramos, como colspan o clases CSS. El array $rows es el que tiene los datos, y se puede rellenar de forma simple, pasándole los datos cargados de la base de datos, como en el ejemplo, o de forma compleja, pasándole data para los datos y los atributos CSS o HTML como segundo parámetro. También se le puede pasar un array $attributes, para controlar los estilos CSS y HTML desde este array, en lugar de desde $header y $rows. Para poder activar la ordenación, es necesario añadirle la función tablesort_sql a la hora de ejecutar la consulta con db_query.

Y aquí va un ejemplo, podéis utilizarlo en un modulo o como snipplet de código dentro de una página de contenido, siempre que establezcáis el formato de entrada, o input filter a PHP code.

$header = array(
array('data' => t('name'), 'sort' => 'asc', 'field' => 'name'),
array('data' => t('Date of join'), 'field' => 'created'),
array('data' => t('Date of logon'), 'field' => 'login'),
);

$sql = "SELECT uid, name,
date_format(from_unixtime(created), '%e-%M-%Y') created,
if(login=0,NULL,date_format(from_unixtime(login),'%e-%M-%Y')) login
FROM {users} u WHERE uid > 0";
$result = db_query($sql.tablesort_sql($header));
while ($data = db_fetch_object($result)) {
$rows[] = array(l($data->name, 'user/'.$data->uid),
$data->created, $data->login);
}

$output = theme('table', $header, $rows);
return $output;
?>

Comentarios

hola:

Me he dado la libertad de utilizar tu codigo, sucede que todo bien hasta que intento ordenar por cabecera. Inmediatamente me sale una pagina llena de texto, no la tabla ordenada. Haber si me hechas una mano

saludos y gracias

Hola manuel

He probado el código en varios sitios, tanto utilizando drupal 5 como drupal 6 y funciona en todos ellos ¿estás utilizando el filtro PHP cuando creas y utilizas el bloque? ¿el usuario tiene permisos?

Saludos

Que tal Pedro:

Gracias por responder. El codigo que has tenido a gracia de compartir lo estoy utilizando en un modulo contruido con otra tabla de base de datos, por supuesto. No se exactamente a que te refieres con que el usuario tiene permiso, lo que te puedo decir es que el usuario tiene permiso para el modulo. Nunca he usado el input format en el drupal 6, lo he revisado pero no dice por ningun lado algo que tenga que ver con php. Estoy usando form api, y justamente la tabla la muestro usando ahah.

A ver si nos ayudamos

Gracias muchas

el texto que me sale es una array con indices data y status. El ultimo en true, y el primero con tags y datos. creo que es un tema de registro de menus

Hola manuel

El ejemplo que he puesto en el mensaje es para utilizar como snipplet en un <strong>bloque</strong>, de ahí que te comente lo del filtro PHP y los permisos.
Si estás utilizando el código en un módulo personalizado con forms API y ahah, necesitaría ver exactamente el código para poder ver el error.
Tal como está funciona si lo añades como un bloque.
Si crees que puede ser un problema de registro de menús, prueba a limpiar la caché (puedes usar el modulo Devel) para ver si se soluciona el problema

Un saludo

Hola amigos , necesito de su ayuda , estoy implementando un sitio en drupal 6 y necesito sacar la informacion que inserte en la BD y mostrarla en una tabla , es la parte donde no se , Como muestro estos datos en una tabla dinamica en drupal ? , gracias de ante mano por su ayuda...

Hola. Estoy desarrollando un sitio en drupal 6. Tengo un módulo con un formulario y quiero mostrar una tabla en el sumbit. He probado de todo y no consigo nada. Sólo consigo mostrar mensajes con drupal_set_message(). ¿Alguien me podría ayudar?
Muchas gracias!!!

Añadir nuevo comentario