Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Geleitwort
Vorwort
1 PEAR – Einführung
2 Authentication
3 Caching
4 Date and Time
5 File Formats
6 HTTP
7 Internationalization
8 Mail
9 Networking
10 PHP
11 Text
12 Web Services
13 Benchmarking
14 Configuration
15 Database
16 File System
17 HTML
18 Images
19 Logging
20 Math
21 Numbers
22 Tools and Utilities
23 XML
24 Selbst Pakete erstellen
25 PECL
Index
Ihre Meinung?

Spacer
 <<   zurück
PHP PEAR von Carsten Möhrke
Anwendung und Entwicklung – Erweiterungen für PHP schreiben
Buch: PHP PEAR

PHP PEAR
798 S., 39,90 Euro
Rheinwerk Computing
ISBN 3-89842-580-0
gp 17 HTML
  gp 17.1 HTML_BBCodeParser
  gp 17.2 HTML_Crypt
  gp 17.3 HTML_Page2
    gp 17.3.1 Methoden zur Manipulation des Heads
    gp 17.3.2 Methoden zur Manipulation des Bodys
    gp 17.3.3 Ausgabe der HTML-Daten
  gp 17.4 HTML_CSS
    gp 17.4.1 Ausgabe des Stylesheets
  gp 17.5 HTML_Javascript
  gp 17.6 HTML_Template_IT
  gp 17.7 HTML_Template_Flexy
    gp 17.7.1 Fomulare in Flexy
    gp 17.7.2 Plugins
  gp 17.8 HTML_Form
  gp 17.9 HTML_QuickForm
    gp 17.9.1 Standard-Formularelemente
    gp 17.9.2 Erweiterte Formularelemente
    gp 17.9.3 Gruppen
    gp 17.9.4 Verarbeitung des Formulars
    gp 17.9.5 Filter
    gp 17.9.6 Serverseitige Validierung
    gp 17.9.7 Clientseitige Validierung
    gp 17.9.8 Datei-Uploads
    gp 17.9.9 Templates
  gp 17.10 HTML_QuickForm_Controller
  gp 17.11 HTML_Menu
  gp 17.12 HTML_TreeMenu
  gp 17.13 HTML_Progress
  gp 17.14 HTML_Table
  gp 17.15 HTML_Table_Matrix
  gp 17.16 Pager


Rheinwerk Computing

17.14 HTML_Table  toptop


Besprochene Version: 1.5 Lizenz: PHP-Lizenz 2.02
Klassendatei(en): HTML/Table.php

Da Tabellen in HTML nach wie vor ein beliebtes Mittel sind, um den Inhalt einer Seite zu strukturieren bzw. Layouts aufzubauen, passiert es bei der Arbeit mit PHP natürlich auch öfter, dass Tabellen ausgegeben werden müssen. Die Ausgabe von umfangreichen HTML-Tags für die Ausgabe einer Tabelle führt allerdings nicht dazu, dass der Quellcode strukturierter wird.

Um den Entwicklern hier eine Erleichterung zu bieten, wurde das Paket HTML_Table geschrieben. Die grundsätzliche Funktionsweise erinnert stark an den manuellen Aufbau einer Tabelle. Zuerst muss ein neues HTML_Table-Objekt abgeleitet werden, was sozusagen dem <table>-Tag in HTML entspricht. Danach folgt jeweils die Definition einer Zeile (<tr>), in der dann die einzelnen Felder (<td>) mit Daten befüllt werden. Da eine Zeile allerdings immer aus einzelnen Feldern besteht, können Sie die Daten direkt an addRow(), die Methode, mit der eine Zeile erzeugt wird, übergeben.

require_once ('HTML/Table.php'); 
 
$daten = array ( 
                  array ('Vorname', 'Nachname', 'Ort'), 
                  array ('Peter', 'Petersen', 'Hamburg'), 
                  array ('Alois', 'Sendlbach', 'M&uuml;nchen'), 
                  array ('Peter', 'Sausewind', 'K&ouml;ln') 
         ); 
 
$table_attr = array( 
                     "width" => "100  %", 
                     "bgcolor" => "#DDDDDD", 
                     "border" => "1" 
              ); 
$table = new HTML_Table($table_attr); 
if (true==PEAR::isError($table)) 
{ 
   die ($table->getMessage()); 
} 
foreach ($daten as $zeile) 
{ 
   $res=$table->addRow($zeile); 
   if (true==PEAR::isError($res)) 
   { 
      die ($res->getMessage()); 
   } 
} 
echo $table->toHtml();

Listing 17.29 Ausgabe einer Tabelle mit HTML_Table

Wie Sie in Listing 17.29 sehen können, werden dem Konstruktor die Attribute mitsamt den dazugehörigen Werten als Array oder String übergeben. Bei der Übernahme dieses Arrays werden die Namen und Werte der Attribute nicht auf Validität geprüft. Der Konstruktor akzeptiert noch einen zweiten Parameter, mit dem Sie definieren können, wie weit die HTML-Tags, die die Tabelle definieren, eingerückt werden sollen. Die Zahl, die hier übergeben werden kann, definiert, wie viele Tabulatorsprünge im Quelltext zu finden sein sollen.

Die Daten, die später in der Tabelle ausgegeben werden sollen, werden in Form eines mehrdimensionalen Arrays übergeben. In der foreach-Schleife, die das Array abarbeitet, wird dann jede einzelne Zeile mit addRow() erzeugt. Diese Methode benötigt als ersten Parameter ein Array. Übergeben Sie eine einfache Variable, quittiert die Methode das mit einem PEAR_Error. Zusätzlich können Sie noch weitere Parameter übergeben. Mit einem assoziativen Array oder einem String als zweiten Parameter können Sie Attribute definieren, die für die Ausgabe genutzt werden sollen. Standardmäßig werden sie in jedem <td> mit ausgegeben.

Normalerweise wird für die Definition der Tabellenfelder ein <td> genutzt. Ziehen Sie es vor, dass die Felder mit einem <th> definiert werden, übergeben Sie als dritten Parameter einfach ein 'TH'. Der dritte Parameter legt fest, ob die Attribute wirklich mit jedem <td> ausgegeben werden sollen. Mit einem true an dieser Stelle gibt die Methode die Attribute jeweils mit dem <tr> aus.

Die Methode toHtml() liefert die komplette Tabelle als String zurück.

Die Ausgabe des Scripts im Browser ist in Abbildung 17.16 dargestellt.

Schön ist, dass Sie die Daten nicht nur zeilenweise übergeben können. Möchten Sie die Daten spaltenweise in die Tabelle einfügen, können Sie addCol() nutzen. Auch hier können Sie die gewünschten Attribute wieder als Array und danach ein 'TD' oder ein 'TH' übergeben. Die Attribute können in diesem Fall nur direkt in die <td>-Tags ausgegeben werden.

Abbildung 17.16 Ausgabe einer Tabelle mit PEAR::HTML_Table

Sollte eines der Felder in dem übergebenen Array leer sein, so wird es automatisch mit einem geschützten Leerzeichen (&nbsp;) gefüllt. Das gilt auch dann, wenn ein Array ein Feld weniger hat. In dem Fall wird das fehlende Tabellenfeld komplett ergänzt. Möchten Sie die automatisch generierten Felder mit einem anderen Wert füllen, können Sie diesen mit setAutoFill() definieren.

Ganze Zeilen oder Spalten auf einmal definieren zu lassen ist zwar sehr effektiv, aber in vielen Fällen ist das sicher nicht flexibel genug. Werden die Inhalte dynamisch generiert oder benötigen Sie ein colspan oder rowspan, könnten die Methoden das nicht leisten. In so einem Fall können Sie auch jedes Feld einzeln mit setCellContents() und setCellAttributes() definieren. Dabei müssen Sie die einzelnen Zeilen bzw. Spalten nicht mit addRow() oder addCol() definieren. setCellContents() bekommt die Koordinaten des gewünschten Feldes durch Angabe von Zeile und Spalte übergeben. Danach folgt der Inhalt, der in dem Feld dargestellt werden soll. Hierbei kann es sich um eine einfache Variable handeln oder um ein beliebiges Objekt, das eine toHtml()-Methode kennt, die einen String zurückgibt. Als letzten Parameter können Sie auch hier wieder 'TD' oder 'TH' angeben, um den Typ des Feldes zu definieren. setCellAttributes() bekommt auch erst zwei Zahlen als Koordinaten für Zeile und Spalte übergeben. Danach können Sie die Attribute für die Zelle als String oder assoziatives Array angeben.

Möchten Sie beispielsweise die Quadrate der Zahlen von eins bis zehn in einer Tabelle ausgeben, könnten Sie das Script aus Listing 17.30 nutzen.

require_once ('HTML/Table.php'); 
$attr='"bgcolor="#DDDDDD"'; 
$table=new HTML_Table("border='1'"); 
for ($zeile=0; $zeile < 10; $zeile+=1) 
{ 
   for ($spalte=0; $spalte < 10; $spalte+=1) 
   { 
      if ($zeile == $spalte) 
      { 
         $cnt=($zeile+1)."*".($spalte+1)."="; 
         $cnt.=($zeile+1)*($spalte+1); 
         $table->setCellContents($zeile,$spalte,$cnt); 
         $table->setCellAttributes($zeile,$spalte,$attr); 
      } 
   } 
} 
echo $table->toHtml();

Listing 17.30 Ausgabe der Quadrate der Zahlen von eins bis zehn

Wichtig bei der Nutzung von setCellContents(), setCellAttributes() und allen anderen Funktionen, die Zellen direkt adressieren, ist, dass sie nullbasierend arbeiten. Die erste Zeile muss also über die Nummer 0 angesprochen werden. Sollte es nötig sein, können Sie den Inhalt einer Zelle übrigens auch wieder auslesen, nachdem er eingefügt wurde, was die Methode getCellContents() für Sie erledigt. getCellContents() bekommt, genau wie getCellAttributes(), die die Attribute eines Feldes ausliest, nur die gewünschten Koordinaten übergeben. In diesem Zusammenhang ist auch getRowAttributes() erwähnenswert, die die Attribute eines <tr>-Tags ausliest, dessen Nummer Sie übergeben. Die ausgelesenen Attribute werden jeweils als Array zurückgegeben.

Alle vorgenannten Funktionen, die Daten schreiben, basieren darauf, dass das Feature AutoGrow eingeschaltet ist. Dieses lässt sich mit setAutoGrow() auch ausschalten, was dazu führen würde, dass Sie alle Zeilen erst manuell anlegen müssen. Da mir allerdings kein sinnvoller Grund eingefallen ist, warum man AutoGrow nicht nutzen sollte, gehe ich darauf nicht ein.

Allerdings hat AutoGrow in einigen Fällen zur Folge, dass man nicht genau weiß, wie groß eine Tabelle geworden ist. Benötigen Sie diese Information, können Sie die Anzahl der Zeilen mit getRowCount() und die Anzahl der Spalten mit getColCount() auslesen.

Des Weiteren sind noch verschiedene Funktionen vorgesehen, um die Formatierung von Tabellen zu vereinfachen. Um allen Zellen einer Tabelle bestimmte Attribute zuzuweisen, die auch hier als Array oder String übergeben werden können, steht setAllAttributes() zur Verfügung. Einzelnen Zeilen oder Spalten können Sie setRowAttributes()- bzw. setColAttributes()-Attribute zuweisen. Beide bekommen an erster Stelle die Nummer der gewünschten Zeile oder Spalte übergeben, worauf dann die Attribute folgen. setRowAttributes() unterstützt darüber hinaus noch die Möglichkeit, die Attribute im <tr> abzulegen, wenn Sie an dritter Stelle true übergeben.

Sollten die Attribute einer Zelle bereits gesetzt sein, haben Sie die Möglichkeit, diese nachträglich zu verändern, sprich: zu überschreiben. Hierzu stehen die Methoden updateAllAttributes(), updateCellAttributes(), updateColAttributes() und updateRowAttributes() zur Verfügung. Hierbei weist die erste Methode allen Zellen, die zweite Methode einer bestimmten Zelle, die dritte Methode einer Spalte und die letzte Methode einer Zeile neue Formatierungen zu. Die Parameter sind hierbei wie bei den Pendants, die mit set beginnen.

Möchten Sie Ihrer Tabelle noch eine Überschrift mit auf den Weg geben, ist setCaption() vorgesehen. Sie bekommt die Überschrift als String übergeben und akzeptiert noch zusätzliche Attribute als optionale Parameter.

 <<   zurück
     
  Zum Katalog
Zum Katalog: PHP PEAR
PHP PEAR
Jetzt bestellen!
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: PHP 5.6 und MySQL 5.7






 PHP 5.6 und
 MySQL 5.7


Zum Katalog: Einstieg in PHP 5.6 und MySQL 5.6






 Einstieg in PHP 5.6
 und MySQL 5.6


Zum Katalog: Responsive Webdesign






 Responsive Webdesign


Zum Katalog: Moderne Websites entwickeln






 Moderne Websites
 entwickeln


Zum Katalog: MySQL 5.6






 MySQL 5.6


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo








Copyright © Rheinwerk Verlag GmbH 2007
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de