17.15 HTML_Table_Matrix 

Besprochene Version: 1.0.7 | Lizenz: PHP-Lizenz 3.0 |
Klassendatei(en): HTML/Table/Matrix.php |
Das Paket HTML_Table_Matrix stellt eine sehr einfache Lösung dar, um Daten, die in einem Array vorliegen, in Form einer Tabelle ausgeben zu lassen. Die Daten können hierbei entweder von links nach rechts oder rechts nach links ausgegeben werden. Eine spaltenweise Ausgabe ist momentan nicht vorgesehen.
require_once ('HTML/Table/Matrix.php'); // Daten fuer die Tabelle $roh_daten=array( 'Hose', 10, 52.50, 'Jacke', 5, 38.00, 'Schuhe',12, 33.00); // Spaltenueberschriften $ueberschriften = array('Artikel','Anzahl','Preis'); // Zusammenfuehren der Daten $ausgabe=array_merge($ueberschriften,$roh_daten); // Neues Matrix-Objekt mit Attributen fuer Tabelle $matrix = new HTML_Table_Matrix('border = "1"'); // Daten uebergeben $matrix->setData($ausgabe); // Groesse definieren $breite=3; // 3 Spalten // Fuer den Fall, dass ein Wert zu wenig da ist, aufrunden $zeilen= ceil(count($ausgabe)/$breite); // Tabellengroesse festlegen $matrix->setTableSize($zeilen,$breite); // Nullpunkt definieren $matrix->setFillStart(0,0); // Neuen Filler ableiten $filler = HTML_Table_Matrix_Filler::factory('LRTB', $matrix); // Filler an Matrix uebergeben $matrix->accept($filler); // Tabelle ausgeben echo $matrix->toHtml();
Listing 17.31 Ausgabe von Datensätzen mit HTML_Table_Matrix
In Listing 17.31 wird zuerst ein Array mit Daten befüllt. Um sicherzustellen, dass korrekte Spaltenüberschriften vorhanden sind, wird dieses Array mit einem anderen zusammengeführt, in dem Überschriften vorhanden sind.
Der Konstruktor der Klasse HTML_Table_Matrix benötigt keine Parameter, aber ihm können die Parameter für das <table>-Tag in Form eines Strings oder Arrays übergeben werden. Dem resultierenden Objekt können die auszugebenden Daten mit der Methode setData() übergeben werden. Ausgehend davon, dass die Tabelle 3 Spalten haben soll, wird in Listing 17.31 dann die Anzahl der benötigten Zeilen dynamisch berechnet. Die Anzahl der Zeilen und Spalten wird anschließend an die Methode setTableSize() übergeben, die die Größe der Tabelle festlegt. Die hier angegebene Größe ist verbindlich. Sollten mehr Datensätze als Tabellenfelder da sein, werden nicht alle Datensätze ausgegeben.
Die Methode setFillStart() legt fest, an welcher Position in der Tabelle der Füllvorgang beginnen soll. Die erste Zahl bezeichnet die Zeile und die zweite die Spalte, wobei der Bezugspunkt 0,0 in der linken oberen Ecke liegt. Allerdings stellt sich hier die Frage, welchen Sinn es machen könnte, etwas anderes als 0,0 anzugeben, da Felder, die leer bleiben, nicht nachträglich gefüllt werden können.
Nachdem diese Vorarbeit geleistet ist, können Sie sich für einen Filler entscheiden. Dieser definiert, wie die Daten in die Tabelle ausgegeben werden. Der Filler wird von der statisch aufzurufenden Methode factory() zurückgeliefert, die in der Klasse HTML_Table_Matrix_Filler definiert ist. Sie bekommt einen der Strings 'LRTB' oder 'RLTB' übergeben. LRTB steht für »Left Right, Top Bottom« und bedeutet, dass der Filler die Zeilen von links nach rechts befüllt und eine Zeile nach der anderen abarbeitet. RLTB ist die Abkürzung für »Right Left, Top Bottom«; in diesem Fall wird Zeile für Zeile von rechts nach links gefüllt. Natürlich sind auch noch andere Regelwerke zum Füllen denkbar. Zurzeit sind allerdings keine definiert, was aber nicht heißen soll, dass nicht noch welche dazukommen.
Das Filler-Objekt muss dann mit der Methode accept() an das HTML_Table_Matrix-Objekt übergeben werden, das dann mithilfe von toHtml() die generierten Tabellendaten zurückgeben kann. Die Ausgabe von Listing 17.31 sehen Sie in Abbildung 17.17.
Abbildung 17.17 Von HTML_Table_Matrix generierte Tabelle