Hallo Christian,
In einer XML-Datei speichere ich die baumartige Struktur ...
Ginge so eine Stuktur überhaupt? Da <Item> einmal ein Endtag hat, und einmal nicht.
Ja.
Wie besser?
Strukturell mag <items>
besser sein, generell ist es aber seitens XML kein Problem sowohl #PCDATA als auch Elemente (in sich selbst) zu verschachteln.
Daraus würde ich dann eine entsprechende HTML Strutkur, vermutlich mit <ul>/<li> bauen, jenachdem wie ich es brauche.
Mir stellt sich an diesem Punkt aber eine andere Frage aus der Überlegung heraus, dass Du eine Datenstruktur hast, die ursprünglich die Lage von zu servierenden Resourcen in einem Dateisystem abbildet. Die Abbildung (Abstraktion) lässt sich in der gewählten Programmiersprache mit rekursiv erstellten, mehrdimensionalen Datenfeldern (Array) für PHP am sinnvollsten verarbeiten. Soweit so gut. Warum willst Du mittels XML eine weitere Abstraktion erstellen? Was spricht gegen ein Speichern der Datenstruktur seitens PHPs durch serialize() (und im umgekehrten Fall unserialize()? Kann auf eine Zwischenspeicherung ganz verzichtet werden, weil der Aufwand, den Du in jedem Fall betreiben willst, des permanent Auslesens der Verzeichnisstruktur gleich kommt?
Weiterhin würde ich dann auf jeder PHP Seite eine Variable setzen, die sich eindeutig in o.g. Baum wiederfinden lässt. Evtl. sollte ich dann mit IDs arbeiten. $_SERVER['PHP_SELF'] o.ä möchte ich nicht als "ID" verwenden, da die Navigation dann von der physikalischen Struktur abhängig wäre.
Wenn Du davon ausgehst, dass die Web-Struktur der Verzeichnisstruktur entspricht, zeigen sich bei einem permanenten Auslesen bereits hier erste Vorteile. Wenn Du Dir nicht selbst einen XML-Parser schreibst, muss Dein Programm bei jeder Anfrage die gesamte XML-Struktur einlesen und verarbeiten, denn so sind die Verfügbaren XML-Parser PHPs nun mal geschrieben. Andernfalls können bei einem Direkten Auslesen der Struktur immer die navigationsbedingten Teile ausgelesen werden.
Habe ich das <Item> gefunden, würde ich den Tree aufsteigen, um eine Breadcrumb-Navigation zu machen.
Unter selber Annahme, der der Kongruenz von Web- und Verzeichnisstruktur, müsstest Du jeweils nur von getcwd() $_SERVER['DOCUMENT_ROOT']
subtrahieren und könntest mittels [link:http://de3.php.net/manual/de/function.explode.php@title=explode]('/' /* bei Win: '\' */,$diff);
die aufsteigende Navigation abstrahieren.
...
Bräuchte man für so etwas einen Art Navigationsmanager oder BreadcrumbManager?
Keinesfalls.
Also ich würde gerne wissen, wie so das Grundkonzept einer guten Navigation aussieht.
Oder sollte man die Navigation lieber in eine Datenbank schreiben?
Schieße nicht auf Deinen Spatz! Wenn Du zu solchen Kanonen greifst, wird es Dir einstweilig die Hand abreißen.
Gruß aus Berlin!
eddi
Der Verweis auf die Grundlagen Deines Handelns, ist das Joch zur Freiheit.
Aber so gilt: Allen Leuten Recht getan, ist keine Kunst, weil's jeder kann.