Einführung

Einführung – Eine HTML-Tabelle erzeugen

Was ist HTML_Table?

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.

Die Werte autoGrow und autoFill

Das autoGrow -Flag

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.

Der Wert autoFill

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" .

Eine Tabelle erzeugen

Die Beispieldaten

Unsere zu erzeugende HTML-Tabelle soll folgende Daten enthalten:

<?php
$data 
= array(
 
'0' => array('Bakken''Stig''''stig@example.com'),
 
'1' => array('Merz''Alexander''alex.example.com''alex@example.com'),
 
'2' => array('Daniel'"Adam"'''')
);
?>

Start

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.

<?php
require_once 'HTML/Table.php';

$attrs = array('width' => '600');
$table = new HTML_Table($attrs);
$table -> setAutoGrow(true);
$table -> setAutoFill('n/a');
?>

Alternativ verwenden Sie die Methode setAttributes(), um Tabellen-Eigenschaften zu setzen. Das obige Beispiel können wir auch in folgender Form schreiben:

<?php
require_once 'HTML/Table.php';

$attrs = array('width' => '600');
$table = new HTML_Table();
$table->setAttributes($attrs);
// [...]
?>

Zeilen hinzufügen

Jetzt verarbeiten wir die Daten. Wir benutzen die alternate -Funktion von HTML_Table, wodurch jede zweite Zeile rot angezeigt wird.

<?php
for($nr 0$nr count($data); $nr++) {
 
$table -> setHeaderContents$nr+10, (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(1null$altRow);
?>

Kopfzellen hinzufügen

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.

<?php
$table 
-> setHeaderContents(00'');
$table -> setHeaderContents(01'Surname');
$table -> setHeaderContents(02'Name');
$table -> setHeaderContents(03'Website');
$table -> setHeaderContents(04'EMail');
$hrAttrs = array("bgcolor" => 'silver');
$table -> setRowAttributes(0$hrAttrstrue);
$table -> setColAttributes(0$hrAttrs);
?>

Tabelle ausgeben

Damit ist es getan. Die Tabelle ist fertig gebaut und wir können Sie als HTML ausgeben.

<?php
echo $table->toHTML();
?>

Die Ausgabe sieht ungefähr so aus:



<table width="600">
        <tr>
         <th bgcolor="silver">&nbsp;</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>

thead, tfoot und tbody anwenden

Wenn Sie ihre Tabellen aufteilen wollen in die Bestandteile thead, tbody und tfoot, dann müssen Sie die entsprechenden Tabellenobjekte holen über getHeader(), getFooter(), und getBody(). Die Objekte können dann wie normale Tabellenobjekte benutzt werden.

<?php
$table 
= new HTML_Table();
   
$head =& $table->getHeader();
   
$foot =& $table->getFooter();
   
$body =& $table->getBody();
   
$head->setCellContents(...);
   
$body->setCellContents(...);
   echo 
$table->toHtml();
?>

In diesem Beispiel wird für tfoot kein Inhalt angegeben. Deshalb werden nur thead- und tbody-Abschnitte erzeugt.

Die Reihenfolge der Abschnitte in der Ausgabe ist thead, tfoot und am Ende tbody. Das ist kein Bug, sondern entspricht dem (X)HTML-Standard.

Seit Release 1.8.0 akzeptieren getBody() und verschiedene andere Methoden, wie z. B. setCellAttributes() einen optionalen nummerischen Parameter $body. Mit ihm können Sie mehrere tbody-Gruppen in ihrer Tabelle erzeugen. Eine neue Gruppe wird erstellt, in dem Sie addBody() aufrufen oder das die autoGrow-Funktion aktiviert wurde und eine neue Nummer benutzt wird.

HTML_Table (Previous) Answers to most Frequently Asked Questions (Next)
Last updated: Sun, 19 Dec 2010 — Download Documentation
Do you think that something on this page is wrong? Please file a bug report or add a note.
View this page in:

User Notes:

There are no user contributed notes for this page.