PEAR-Handbuch | ||
---|---|---|
Zurück | Nach vorne |
HTML_Table bietet eine Schnittstelle um HTML-Tabellen zu erzeugen. Sie können mit der Tabelle wie bei einer Tabellenkalkulation arbeiten. Anstatt direkt mit HTML zu arbeiten und linear Zellen hinzuzufügen, können Sie Zellen direkt ansprechen und ausfüllen, unabhängig von ihrer Position. Es gibt keinen Unterschied ob Sie mit dem Ausfüllen am Anfang beginnen, in der Mitte oder am Ende, gleich ob es eine Spalte oder eine Zeile ist.
Normalerweise definieren Sie eine Tabelle mit einer konstanten Anzahl an Spalten und Zeilen. Aber manchmal wissen Sie nicht, wieviele Spalten und Zeilen Sie benötigen: z.B. die Transformation von Benutzereingaben oder die Ausgabe einer Ergebnismenge einer Datenbank-Abfrage.
In solchen Fällen sollten Sie die autoGrow-Funktion aktivieren. In diesem Modus ergänzt HTML_Table neue Spalten und Zeilen automatisch, wenn eine Zelle aufgerufen wird, die sich in einer noch nicht existierenden Spalte oder Zeile befindet.
Wenn Sie eine Tabelle mit Daten erzeugen, müssen Sie manchmal nicht alle Zellen mit verschiedenen Werten füllen. Vielleicht wissen Sie den Wert für eine bestimmte Zelle nicht, oder Sie woll einen Standardwert einfügen - z.B. bei Benutzerdaten. Nicht jeder Benutzer hat ein Mobiltelefon, eine Email-Adresse usw. In diesem Fall soll ein "n/a" in die betreffende leere Zelle eingefügt werden.
Deshalb definieren Sie einfach "n/a" als Wert für autoFill und befüllen nur die Zellen, für die Sie Daten besitzen. Nicht ausgefüllte Zellen erhalten automatisch den Wert "n/a".
Unsere zu erzeugende HTML-Tabelle soll folgende Daten enthalten:
$data = array( '0' => array('Bakken', 'Stig', '', 'stig@example.com'), '1' => array('Merz', 'Alexander', 'alex.example.com', 'alex@example.com'), '2' => array('Daniel', "Adam", '', '') ); |
Wir beginnen damit, ein neues Objekt von HTML_Table zu erzeugen. Die Tabelle soll 600 Pixel bereit werden. Da wir die Menge der Daten nicht im voraus wissen, aktivieren wir die autoGrow-Funktion. Nicht ausgefüllte Zellen sollen automatisch den Wert "n/a" erhalten.
require_once 'HTML/Table.php'; $tableAttrs = array('width' => '600'); $table = new HTML_Table($tableAttrs); $table -> setAutoGrow(true); $table -> setAutoFill('n/a'); |
Jetzt verarbeiten wir die Daten. Wir benutzen die alternate-Funktion von HTML_Table, wodurch jede zweite Zeile rot angezeigt wird.
for($nr = 0; $nr < count($data); $nr++) { $table -> setHeaderContents( $nr+1, 0, (string)$nr); for($i = 0; $i < 4; $i++) { if('' != $data[$nr][$i]) $table -> setCellContents( $nr+1, $i+1, $data[$nr][$i]); } } $altRow = array("bgcolor"=>"red"); $table -> altRowAttributes(1, null, $altRow); |
Als nächstes definieren wir die Zellen in der ersten Zeile und der ersten Spalte als Kopfzellen. Da es wie eine Tabellenkalkulation aussehen soll, benutzen wir die Farbe "silver" als Hintergrundfarbe für jede Kopfzelle. Die erste Zeile enthält die Spalten-Überschift, die erste Spalte die Nummer der jeweiligen Datensatz-Zeile.
$table -> setHeaderContents(0, 0, ''); $table -> setHeaderContents(0, 1, 'Surname'); $table -> setHeaderContents(0, 2, 'Name'); $table -> setHeaderContents(0, 3, 'Website'); $table -> setHeaderContents(0, 4, 'EMail'); $hrAttrs = array("bgcolor" => 'silver'); $table -> setRowAttributes(0, $hrAttrs, true); $table -> setColAttributes(0, $hrAttrs); |
Damit ist es getan. Die Tabelle ist fertig gebaut und wir können Sie als HTML ausgeben.
echo $table->toHTML(); |
<!-- BEGIN TABLE LEVEL: 0 --> <table width="600"> <tr> <th bgcolor="silver"> </th> <th bgcolor="silver">Surname</th> <th bgcolor="silver">Name</th> <th bgcolor="silver">Website</th> <th bgcolor="silver">EMail</th> </tr> <tr> <th bgcolor="silver">0</th> <td>Bakken</td> <td>Stig</td> <td>n/a</td> <td>stig@example.com</td> </tr> <tr> <th bgcolor="silver">1</th> <td bgcolor="red">Merz</td> <td bgcolor="red">Alexander</td> <td bgcolor="red">alex.example.com</td> <td bgcolor="red">alex@example.com</td> </tr> <tr> <th bgcolor="silver">2</th> <td>Daniel</td> <td>Adam</td> <td>n/a</td> <td>n/a</td> </tr> </table> <!-- END TABLE LEVEL: 0 --> |
Wenn Sie ihre Tabellen aufteilen wollen in die Bestandteile thead, tbody und tfoot, dann müssen Sie die entsprechenden Tabellenobjekte holen über getHeader()(), getBody() und getFooter(). Die Objekte können dann wie normale Tabellenobjekte benutzt werden.
$table = new HTML_Table(); $head =& $table->getHeader(); $foot =& $table->getFooter(); $body =& $table->getBody(); $head->setCellContents(...); $body->setCellContents(...); echo $table->toHtml(); |
Anmerkung: Die Reihenfolge der Abschnitte in der Ausgabe ist thead, tfoot und am Ende tbody. Das ist kein Bug, sondern entspricht dem (X)HTML-Standard.
Zurück | Zum Anfang | Nach vorne |
HTML_Table | Nach oben | FAQ |