Zitat:
Zitat von HHP nabend,
ich habe ein kleines Problem. Ich bin gerade dabei eine Klasse für das Generieren von HTML-Formularen zu erstellen. Ich habe mir etwas Anregung besorgt, auf einer Seite wo beschrieben wurde, wie die dortige Klasse funktioniert. |
Nur mal so als PROTIP: Es gibt fertige Klassen, die sowas erledigen. Die primitivsten arbeiten
direkt auf DOM-Node-Basis. Es gibt aber auch einige, die dir das Wühlen in den Untiefen der Node-Bäume abnehmen und gleich
Formulare zusammensetzen.
Zitat:
Hängen geblieben bin ich an folgendem Punkt:
Man erstellt eine Klasse für das Formular:
$form= new Formular("TestForm", "POST");
um dann Elemente hinzuzufügen:
$form->addElement(...);
Nun frage ich mich allerdings, wie ich die daten in addElement verarbeite. Wie speicher ich die einzelnen erstellten Elemente? In einem Array?
|
Beispielsweise. Da ein Array in PHP die Standard-Collection-Datenstruktur ist, greift man meist auf diese zurück. Prinzipiell könntest du auch eine Art doppelt-verkettete Liste bauen, in der die Kind-Nodes rumhängen.
Zitat:
Ich will ja am Ende alles mithilfe einer funktion ausgeben lassen.
...
|
Auch das ist kein Problem. Alle Node-Objekte erben von der gleichen Basis-Struktur, die eine Funktion enthält, die aus sich selbst HTML-Code erzeugt. Um dann die Kind-Nodes zu HTML zu machen ruft die "Mutter" einfach der Reihe nach die HTML-Render-Funktion der Kinder auf. Etwa so:
PHP-Code:
class html_node {
function __construct() {
$this->children = array ();
}
function addElement(html_node $child) {
$this->children[] = $child;
return $this;
}
function as_html() {
$html = '';
// render the current node itself
// ...
// render children
foreach ($this->children as $child) {
$html .= $child->as_html();
}
// render the current node's end-tag (if needed)
// ...
return $html;
}
function __toString() {
// oder was anderes Nuetzliches
return $this->as_html();
}
}
class html_form extends html_node {
// ...
}
Falls du das aber nicht zu Lernzwecken betreibst, würde ich dir raten, eine der fertigen Klassen zu benutzen, anstatt das Rad neu zu erfinden. Es gibt nämlich eine Menge Dinge zu handhaben wie: HTML-Escaping von Attributen, vernünftige Formatierung des HTML-Quelltextes (Einrückung usw., damit man das Debuggen kann) usw.