sql2html Konverterklasse
0.6 Beta vom 2.4.2010
Motivation
Oftmals ist es so, dass man das Ergebnis einer SQL-Abfrage direkt auf eine HTML-Seite bringen möchte. Es beginnt dann eine Arbeit, die immer wieder gleich und sehr frustrieren ist. Verbindung öffnen, Abfrage durchführen und das Ergebnis durch mehrere Schleifen jagen die dann den HTML-Code zusammenbauen. Das Ergebnis ist dann sehr rudimentär, es hat keine Seitenumschaltung oder Verlinkungen und sieht ziemlich bescheiden aus, so dass auch noch etliche Designarbeit geleistet werden muss.
Genau hier setzt die sql2html Konverter-Klasse an. Sie wird mit dem SQL-Statement aufgerufen und gibt dann direkt die fertige HTML-Tabelle zurück.
Eine Demo der Klasse findet sich unter der Adresse www.hd-internetdienste.de/sql2html/
Ich freue mich über Feedback.
Der Quellcode dieser Demoseite kann am Ende dieser Doku heruntergeladen werden.
Funktionsumfang
- Wandelt ein SQL-Statement in eine fertige HTML-Tabelle um.
- Erstellt automatisch eine Navigationsleiste mit den Seiten. Es werden immer 6 Seiten vor und 6 Seiten nach der aktuellen Seite eingeblendet, sowie die erste und die letzte Seite.
- Eine Funktion stellt ein Formular bereit, das das direkte Anspringen einer Seite ermöglicht.
- Die Klasse kann mit beliebig großen Tabellen umgehen. Das wird dadurch sichergestellt, dass vor dem eigentlichen Lesen der Daten eine Abfrage vorgelagert ist, die ermittelt wie viele Datensätze denn bei dieser Abfrage betroffen wären. Aus diesem Wert und der Seiteninformationen aus dem Konstruktoraufruf können dann gezielt die entsprechenden Daten für die aktuelle Seite gelesen werden.
- Die HTML-Tabelle kann horizontal und vertikal angeordnet ausgegeben werden. Vertikal ist besonders dann interessant, wenn ein einzelner Datensatz ausgegeben werden soll.
- Auf den ermittelten Datenbestand kann auch direkt zugegriffen werden, sollte eine Tabelle erstellt werden müssen, deren Form nicht durch die sql2html Klasse generiert werden kann.
- Das gesamte Erscheinungsbild der Ausgabetabelle ist so vorbereitet, dass es per CSS formatiert werden kann.
- Sollte eine Seite mit anderen Parametern aufgerufen werden, so werden diese weitergereicht wenn die sql2html Klasse einen Reload der Seite durchführt.
Klassenbeschreibung
- $CssPrefix
- Eigenschaft in der das Präfix für die CSS-Klassen der Ausgabe festgelegt wird. Default auf "sql2html". Wichtig wenn auf einer Seite 2 Tabellen mit unterschiedlicher Formatierung angezeigt werden sollen.
- __construct(&$db, $Statement, $PageSize=30)
- Parameter:
- $db steht für eine geöffnete MySQLi-Verbindung. Wie das gemacht wird, steht in der Demo die es am Ende des Artikels zum Herunterladen gibt.
- $Statement ist der eigentliche Befehl, der in eine Tabelle konvertiert werden soll.
- $PageSize steht für die Anzahl der Datensätze, die auf einer Seite ausgegeben werden. Sind mehr Sätze vorhanden, wird eine neue Seite angelegt. Dieser Parameter kann weggelassen werden. Der Default-Wert ist dann 30.
- Parameter:
- GetContentArray()
- Gibt ein Array zurück, das den Inhalt der Abfrage für die entsprechende Seite enthält. Die Funktion ist eine Art Notfallkonstrukt, sollte eine spezielle Ausgabetabelle benötigt werden, die durch die sql2html-Klasse nicht erstellt werden kann. Durch den direkten Zugriff auf das Datenarray kann die Tabelle dann immer noch per Hand aufbereitet werden.
- GetContentTable()
- Gibt einen String mit der fertigen Ausgabetabelle ohne Navigation zurück.
- GetContentTableVert()
- Gibt einen String mit der fertigen Ausgabetabelle ohne Navigation zurück. Die Anzeige ist dabei um 90 Grad verdreht, so dass die Kopfzeile in der ersten Spalte steht. Dies macht vor allem dann Sinn, wenn ein einzelner großer Datensatz angezeigt werden soll.
- GetContentTableWithNavigation()
- Gibt einen String mit der fertigen Ausgabetabelle mit Navigation zurück.
- GetGoToPage()
- Gibt einen String mit einem Formular zurück, das die direkte Eingabe der gewünschten Seite ermöglicht. Wichtig für extrem große Tabellen.
- GetTableNavigation()
- Gibt nur die Navigationszeile zurück.
- SetColumnName($ColumnName, $NewName)
- Es stehen immer die Spaltenüberschriften in der Tabelle, welche im SQL-Statement benannt wurden. Da man im SQL-String aber keine Spaltennamen mit Leerzeichen angeben kann, kann man über diese Funktion die angezeigte Spaltenüberschrift überschreiben.
- Parameter
- $ColumnName Der Spaltenname gemäß SQL-String der umbenannt werden soll.
- $NewName Die neue Spaltenüberschrift.
- SetColumnNameAsPic($ColumnName, $Path)
- ermöglicht es eine bestimmte Spalte als Bild zu definieren. Dabei wird vorausgesetzt dass in der Spalte der vollständige Name des Bildes steht. Über die $Path Variable wird dann der Pfad zum Bild angegeben.
- Parameter
- $ColumnName Der Spaltenname gemäß SQL-String der als Bild behandelt werden soll.
- $Path Der Pfad zu dem Ordner auf dem Webserver in dem das Bild liegt.
- SetLinkforColumn($ColumnName, $Path)
- Ermöglicht die Verlinkung einer Spalte. Dabei können im $Path in spitzen Klammern andere Feldnamen angegeben werden. Die Klasse ersetzt dann selbstständig den Platzhalter mit dem entsprechenden Wert. Das ist immer dann erforderlich, wenn der Spalteninhalt für eine andere Information steht, auf die verlinkt werden soll.
- Parameter
- $ColumnName Der Spaltenname gemäß SQL-String der verlinkt werden soll.
- $Path Der Pfad der beim Klick auf den Link aufgerufen werden soll. Enthält auch die Platzhalter in den spitzen Klammern. Bsp.: "fz.php?AutoID=<AutoID>"
- SetMaskedColumn($ColumnName)
- Wenn Links zu anderen Sätzen verwendet werden sollen, muss ja die entsprechende ID im Resultset grundsätzlich mal vorhanden sein, da sonst die Klasse den richtigen Wert für den Parameter nicht einsetzen kann. Damit aber diese IDs nicht immer in der Ergebnistabelle angezeigt werden müssen, kann man mit dieser Funktion bestimmte Spalten (z.B. IDs) aus der Ergebnistabelle ausblenden.
- Parameter
- $ColumnName Der Spaltenname gemäß SQL-String der in der Ergebnistabelle ausgeblendet werden soll.
Beispiele
Minimalbeispiel
Der nachstehende Code ist alles was für eine Ausgabe mit Navigation erforderlich ist:
<?php $sql="Select * from Kunden"; $s2h = new sql2html($db,$sql , 5); echo $s2h->GetContentTableWithNavigation(); ?>
Das war es schon! Einfach oder?
Beispiel mit Link
<?php $sql= "Select ID, Marke, Modell from Autos"; //Konstruktor $s2h = new sql2html($db, $sql, 5); //Link setzen. dabei den Wert aus Spalte "ID" für den Platzhalter einsetzen. $s2h->SetLinkforColumn("Modell", "fz.php?AutoID=<AutoID>"); //Spalte ID ausblenden, da der Wert nur für den Link von Bedeutung ist und nicht angezeigt werden muss. $s2h->SetMaskedColumn("ID"); //Ausgabe Tabelle echo $s2h->GetContentTableWithNavigation(); ?>
Beispiel mit Bild
<?php $sql= "Select Marke, Modell, Bildname from Autos"; //Konstruktor $s2h = new sql2html($db, $sql, 5); //Bild einfügen. Der Bildname aus der Tabelle wird dann im IMG-Tag hinter den Pfad gesetzt. $s2h->SetColumnNameAsPic("Bildname", "bilder/klein/"); //Ausgabe Tabelle echo $s2h->GetContentTableWithNavigation(); ?>
Beispiel mit verlinktem Bild
<?php $sql= "Select ID, Marke, Modell, Bildname as LinkAufBild, Bildname as LinkAufSeite from Autos"; //Konstruktor $s2h = new sql2html($db, $sql, 5); //Bild einfügen. Der Bildname aus der Tabelle wird dann im IMG-Tag hinter den Pfad gesetzt. $s2h->SetColumnNameAsPic("LinkAufBild", "bilder/klein/"); $s2h->SetColumnNameAsPic("LinkAufSeite", "bilder/klein/"); //Link auf das große Bild setzten $s2h->SetLinkforColumn("LinkAufBild", "bilder/"); //Link auf eine andere Seite setzen $s2h->SetLinkforColumn("LinkAufSeite", "fz.php?AutoID=<AutoID>"); //Spalte ID ausblenden, da der Wert nur für den Link von Bedeutung ist, und nicht angezeigt werden muss. $s2h->SetMaskedColumn("ID"); //Spalten schöner benennen //$s2h->SetColumnName("LinkAufBild", "Verlinkung auf Originalbild"); //$s2h->SetColumnName("LinkAufSeite", "Verlinkung auf eine andere Seite"); //Ausgabe Tabelle echo $s2h->GetContentTableWithNavigation(); ?>
Wichtiges
- Der Tabellenprefix im Sinne von "a.id, b.id" wird durch die sql2html-Klasse nicht berücksichtigt. Wenn also eine Abfrage über 2 Tabellen durchgeführt wird, so muss explizit ein anderer Name in der Abfrage vergeben werden. "a.id as aid, b.id as bid"
Aktualisiert (Montag, den 31. Oktober 2011 um 09:11 Uhr)
