Drupal 6.x - theme_table - táblázatok kiíratása

Hogyan írassunk ki egy táblázatot a Drupal 6.x-ben?
A theme_table() függvény szolgál erre a célra. Az angol leírás itt olvasható: theme_table - Drupal API
Egy másik hasznos oldal: Theming 101 - The theme_table function a különböző formázási lehetőségekről.

Egyszerűen:
Csak kiiratjuk a sorokat egy egyszerű fejléccel.

$content = array(
  array(1, 2, 3),
  array(4, 5, 6),
  array(7, 8, 9)
);
$header = array("Col1", "Col2", "Col3");
return theme_table($header, $content);

Összetettebben (ha az adatokat egy másik adatbázisból vesszük és szeretnénk ha a fejlécre kattintva lehetne a sorbarendezést változtatni):
A példában a lekérdezett adattáblában (filetable) fájl adatok vannak.

  // Csatlakozunk a másik adatbázishoz és aktuálissá tesszük
$conn2 = mysql_connect('localhost', 'mydatabase','password');
mysql_select_db("mydatabase", $conn2);
  // Elkészítjük a táblázat fejlécét. A "data" a fejléc megjelenítendő címkéje, a "field" az adatbázis mező neve, "sort" ha rendezni kell
$header = array(
  array("data"=>"ID", "field"=>"id", "sort"=>"desc"),
  array("data"=>"FileName", "field"=>"filename"),
  array("data"=>"FileType", "field"=>"filetype"),
  array("data"=>"FileSize", "field"=>"filesize"),
  array("data"=>"Note", "field"=>"note"),
);
  // Az adatok lekérdezése az adatbázisból
$sql = "SELECT id, filename, filetype, filesize, note FROM filetable ".tablesort_sql($header);
$queryResult = mysql_query($sql, $conn2);
$content = array();
while ($row = mysql_fetch_assoc($queryResult))
    $content[] = $row;
return theme_table($header, $content)

 

Egy másik összetett megoldás,  amelyben szintén sorbarendezzük az adatbázisból kiolvasott adatokat.
A példa innen származik: http://drupal.org/node/144371#comment-232344

<?php
function client_list() {
  $sql = 'SELECT cid, first_name, last_name, company, city FROM {clients}';
  $limit = 20;
  $header = array(
    array('data' => t('Name'), 'field' => 'last_name', 'sort' => 'asc'),
    array('data' => t('Company'), 'field' => 'company'),
    array('data' => t('City'), 'field' => 'city')
  );
  $tablesort = tablesort_sql($header);
  $result = pager_query($sql . $tablesort, $limit);
  $rows = array();
  while ($client = db_fetch_object($result))
    $rows[] = array(l($client->last_name.', '.$client->first_name, 'client/'.$client->cid), $client->company, $client->city);
  if (!$rows)
    $rows[] = array(array('data' => t('No client accounts created yet.'), 'colspan' => 3));
  $output .= theme('table', $header, $rows);
  $output .= theme('pager', NULL, $limit, 0);
  return $output;
}
?>

 

Alább jön eg ypélda a sorbarendezés és a lapozás együttes használata, azaz amikor együtt használjuk a theme_table(), tablesort_sql() és a theme_pager() függvényeket.

Az alábbi példában a felhasználók listáját iratjuk ki.

/** ===========================
* MyModule - User List
**/
function _mymodule_userlist() {
  $content = "<h3>User List</h3>\n";
  $count     = 10; // Hány sort akarunk látni egy oldalon
  $sql       = "SELECT uid, name, mail FROM {users}"; // A teljes lista lekérdezése
  $sql_count = "SELECT count(*) FROM {users}"; // A rekordok össz számának lekérdezése
  $header    = array(  // A fejléc beállítása, név szerinti rendezéssel
    array('data' => t('UID'),  'field' => 'uid'),
    array('data' => t('Name'), 'field' => 'name', 'sort' => 'asc'),
    array('data' => t('Mail'), 'field' => 'mail'),
  );
  // A lapozóhoz kérjük le az adatokat - sorbarendezve
  $sql_pager = pager_query($sql.tablesort_sql($header), $count, 0, $sql_count);
  // Összeállítjuk a rekord-listát
  $tbl = array();
  while ($row = db_fetch_array($sql_pager))
    $tbl[] = $row;
  // Kiíratjuk a táblát
  $content .= theme_table($header, $tbl);
  // Kiíratjuk a lapozót
  $content .= theme('pager', NULL, $count, 0);
  // Visszaadjuk a kiíratandó HTML kódot
  return $content;
}