Summary: A Drupal "theme table" example, where I show how to generate an HTML table from a Drupal module, using the Drupal theme function (and specifically not the theme_table function).
I was working on a new Drupal 7 application yesterday, developing a module where I need to display a table in my Drupal module, and I couldn't find any good Drupal table examples, so I thought I'd share my working code here. This code isn't very good yet, but it does show a "Drupal theme table" example, i.e., how to display a table in Drupal by properly calling the theme function.
Without much discussion, here's my current Drupal theme table example. While I'm only on Day 1 of development, this code comes directly from a Drupal module named 'Sleetmute', and a file named sleetmute.module:
<?php
# a hook_menu implementation
function sleetmute_menu() {
$items = array();
# my drupal table list view menu item
# this first line is the url ('projects')
$items['projects'] = array(
'title' => t('Your Projects'),
'description' => 'Your Sleetmute FPA Projects',
'page callback' => 'projects_list',
'access arguments' => array('access content'),
'type' => MENU_NORMAL_ITEM,
);
return $items;
}
function projects_list() {
$header = array('Cell 1', 'Cell 2');
$data = array(
array('A', 'B'),
array('C', 'D')
);
$output = theme('table',
array('header' => $header,
'rows' => $data ));
return $output;
}
I'm not an expert Drupal module developer by any stretch of the imagination, but I do know that code works. It displays a simple HTML table with a header row and two data rows. Note that I call the Drupal theme function here with the 'table' attribute, and not the theme_table function. I do know that this approach is correct.
In that example I replaced my actual SQL database call with simple static table data. In the code below I'll show the actual Drupal table code, including the SQL query.
A Drupal theme table example with a database query
As a more 'real world' Drupal theme table example, here's the actual code I use to generate my HTML table, using a SQL query to get the data I need:
function get_user_id() {
global $user;
return $user->uid;
}
function projects_list() {
$header = array('ID', 'Type', 'Name');
$data = array();
# set the database table
$query = db_select('sleet_projects', 'p');
# configure the query
$query->condition('user_id', get_user_id())
->fields('p', array('id', 'project_count_type', 'name'));
# execute the query
$results = $query->execute();
foreach ($results as $row) {
$data[] = array($row->id,
$row->project_count_type,
$row->name);
}
$output = theme('table',
array('header' => $header,
'rows' => $data ));
return $output;
}
This example does not currently show how to add a pager to a Drupal table, but I hope to get that working later today.
Also, I should mention that this code works on Drupal 7, and will not work on Drupal 6, primarily because of the SQL functions I've used.
Drupal theme docs
As a relatively new Drupal module developer, I don't understand the Drupal theme function docs, but that's a link to them. This link on default theme implementations may also be helpful, but again, at the moment I don't understand the intent of that document. (Once I understand this process better I'll be glad to update that page, but at the moment I think that page can be seriously improved by including one or two Drupal theme function examples.)
In the meantime, if you need a Drupal theme table example, I hope this helps get you started in the right direction.

