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; }