Edgar Ehritt: (PHP) Navigation

Beitrag lesen

Re:

So ganz versteh ich es nicht.

Ich wollte die Navigation in XML abbilden, statt in einem PHP Array, weil ich denke dass es sauberer und einfacherer wartbar ist. Das ist etwa so wie die Frage: "CSS inline schreiben oder extern einbinden".

Du bist beim Abbilden der Verzeichnisstruktur durch XML aber nicht in(nerhalb) einer Programmiersprache, die Instanzen aus Objekten formt. Das heißt, dass Du bei Veränderungen der Verzeichnisstruktur _zusätzlich_ Deine XML-Daten(bank) zu verändern hast. Manuell oder maschinell ist egal. Du betreibst Mehraufwand.
 Daher hinkt der Vergleich zu CSS enorm. Sagen wir ein HTML-Dokument (mittels DOM betrachtet ist dem ja so), sei Deine Verzeichnisstruktur. CSS arbeitet aber ("CLASS") Objekten.

/* Objekte       Eigenschaften */  
  
body            {margin:0;color:grey}  
ul              {padding:10px;font-size:1.2em}  
li.sp1          {padding:0;margin:0}

Veränderst Du nun das Dokument benötigt aber das style sheet keiner Anpassung. Weil das CSS-realisierende Programm auf die html- O bjekte (dOm) zurückgreift.

Wenn ich das richtig verstehe, sollte ich die Struktur in PHP erzeugen, und dann serialisiert ablegen? Und wenn ich sie dann wieder brauche, wieder deserialisieren? Ich glaube ich hab es nicht verstanden, was du willst, denn es doch egal, ob die Daten dann in XML vorliegen oder binär.

Wenn sich tatsächlich erweisen sollte, dass es Sinn macht, die Struktur niederzuschreiben und dafür umzuformulieren, ist das nur eine Alternative, die PHP erheblich weniger Systemresourcen verbrauchen lässt. Darin liegt ein weiter Vorteil gegenüber XML.

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.

Davon möchte ich ja nicht ausgehen. Physikalisch kann z.B. eine andere Struktur vorliegen, als die die man später auf der Webseite sieht.

Ein System aus alias wird Dir dauerhaft Mehrarbeit und Potential an Fehlern bieten. Maschinelles Abarbeiten der Web-Strukturanpassungen ist nicht mehr möglich. Willst Du Dich dauerhaft, arbeitstechnisch gesehen, unentbehrlich machen?

Selbst wenn, müsste ich immer noch bei jeder Anfrage das XML abparsen, um aus dem physikalischen Pfad einen formatierten Titel (der dann irgendwo in der XML datei steckt) herauszufinden.

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.

ja, dann müssten meine Verzeichnisse genauso heißen, wie sie auch in der Navigation zu sehen sein sollen. D.h ich könnte keine Umlaute oder Leerzeichen benutzen.

$replace=array(  
        'Ae'=>'Ä',  
        'ae'=>'ä',  
        '+' =>' '  
        # und so weiter  
);  
[link:http://de3.php.net/manual/de/language.functions.php@title=function] fs2navi($name,$richtung=true){  
        [link:http://de3.php.net/manual/de/language.control-structures.php#control-structures.if@title=if](!$richtung){  
               $replace=[link:http://de3.php.net/manual/de/function.array-flip.php@title=array_flip]($GLOBALS['replace']);  
        }  
        [link:http://de3.php.net/manual/de/control-structures.foreach@title=foreach]($replace as $k=>$v){  
                $name=[link:http://de3.php.net/manual/de/function.str-replace.php@title=str_replace]($k,$v,$name);  
        }  
        [link:http://de3.php.net/manual/de/function.return.php@title=return]($name);

Somit hast Du keine Probleme _direkt_ auf die Struktur zuzugreifen und deren ursprünglichen Informationsgehalt, nämlich der der in den Verzeichnis- und Dateinamen, voll nutzen ohne weitere Maschinerie (XML und seine parse gang) zu benötigen.

Also ich mach es jetzt im moment so, dass ein XML File hab, (ähnlich wie beschrieben).
Dort steht die baumartige Struktur drin, und zu jedem <item> habe ich ein Attribut "href" und "title".
Bei einer Anfrage, wird $_SERVER['PHP_SELF'] mit jedem href verglichen, bis eine Übereinstimmung gefunden wurde. Während der rekursion merk ich mir den Pfad und kann so mit die Navigation erstellen. Und das "title" Attribut dient gleichzeitig als <title> und <h1> Wert meiner Seite...

Oh mein Gott. Du wirft Deinen Spatz ja vor die Säue? -,-

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.