Menu-Funktion bauen
Tom
- php
Hello,
für den "Webbaukasten" bastel ich nun schon einige Tage an diversen Ideen für eine make_menu() - Funktion.
Sin dahinter ist, dass die Navigation sich über diese Funktion in jeder Seite des "Webs" selber ermitteln kann.
Das geht prinzipiell schon recht einfach, indem man jeder quasi-statischen Seite ein eigenes Verzeichnis gibt und die Directory-Namen entsprechend sinnvoll wählt. Leider hat man dann keinen Einfluss auf die Reihenfolge der Menupunkte.
Wenn man aber jetzt z.B die Verzeichnisse
(01)Willkommen
(03)Produkte
(22)Kontakt
nennen würde, und die Numerierung für die textanzeige im Menu unterdrückt, hat man zwar Einfluss auf die Reihenfolge der Links, aber man würde bei irgendeiner späteren Änderung einmal gegen den Grundsatz "never kill an active link" (Suchmaschinen) verstoßen.
Das gefällt mir daher nicht wirklich.
Wer hat denn vielleicht eine gute Idee, wie man sowas äußerst minimalistisch und trotzdem selbstdeklaratorisch aufbauen könnte?
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hallo
Du könntest eine Textdatei benutzen, in der Du die Einträge machst.
So in der Art:
verzeichnis|Name des Eintrags|1
Das wäre dann zwar nicht mehr so automatisch, aber dafür kannst Du auch die Namen der Menüpunkte ändern, ohne die Struktur anzufassen. Außerdem kannst Du Bezeichnungen verwenden, die sich als Verzeichnisnamen nicht so gut machen ;-)
Gruß,
Maddin
Hello,
Du könntest eine Textdatei benutzen, in der Du die Einträge machst.
So in der Art:
verzeichnis|Name des Eintrags|1
Das wäre dann zwar nicht mehr so automatisch, aber dafür kannst Du auch die Namen der Menüpunkte ändern, ohne die Struktur anzufassen. Außerdem kannst Du Bezeichnungen verwenden, die sich als Verzeichnisnamen nicht so gut machen ;-)
Das sind alles überlegenswerte Argumente.
Das habe ich auch alles schonmal durch.
Leider hat man dann immer noch die Redundanz.
Die Systeme, die mit "/?id=79880" arbeiten sind auch nicht hübschwer, aber sie verschenken eine wichtige Geweichtungsfunktion für die Suchmaschinen. Ein Pfad auf eine (nicht genannte) index.* ist immer noch die griffigste Lösung. Man müsste also wahrscheinlich schon bei kleinsten Lösugnen auf Mod_Rewrite zurückgreifen. Der erscheint mir aus mehreren Erwägungen inzwischen als immer unverzichtbarer.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hallo Tom,
Das sind alles überlegenswerte Argumente.
Das habe ich auch alles schonmal durch.
Leider hat man dann immer noch die Redundanz.
für meine Begriffe versteht ihr Euch noch nicht richtig.
Du hast doch vorher geschrieben, Du würdest eine Verzeichnisstruktur nutzen wollen, um die einzelnen Verweise des Menüs im Dateisystem zurepräsentieren. Somit kannst Du doch in jedes Verzeichnis eine ".menu"-Datei plazieren, die die Informationen der Reihenfolge beinhaltet.
Im simpelsten Fall sind dort nur die Unterverzeichnisnamen mit LF umgebrochen abgelegt. Aber auch denkbar wäre eine zentrale ".menu"-Datei, die eine Serialisiertes Datenfeld der gewünschten Struktur beinhaltet, von Nöten. Redundanz in Form von http://test/7_Begriff/0_Begriff/22_Begriff/Begriff.php entfiele dabei, da die Reihung aus der ".menu"-Datei resultiert.
Gruß aus Berlin!
eddi
Hello,
Im simpelsten Fall sind dort nur die Unterverzeichnisnamen mit LF umgebrochen abgelegt. Aber auch denkbar wäre eine zentrale ".menu"-Datei, die eine Serialisiertes Datenfeld der gewünschten Struktur beinhaltet, von Nöten. Redundanz in Form von http://test/7_Begriff/0_Begriff/22_Begriff/Begriff.php entfiele dabei, da die Reihung aus der ".menu"-Datei resultiert.
Die Idee mit der .ht_menu-Datei im Verzeichnis ist gar nicht so schlecht. Dann habe ich zwar verteilte Datenhaltung, aber ein späterer Pfleger der Seite wird wohl darauf kommen, worum es sich handelt. (Doku gibts ja schließlich auch noch) Die Redundanz ist damit nicht aufgehoben. Ich muss den Verzeichnisnamen trotzdem einmal in der Verzeichnisstruktur anlegen und einmal (ggf. mit seinem Anzeigenamen) in die Menudatei eintragen.
Die sieht dann aber nur noch so aus:
uebersicht; Übersicht
stoerfaktoren; Störfaktoren
auskunft; Auskunft
Semikolon ist dann natürlich verboten im Verzeichnisnamen und im Menupunkt. Habe ich aber auch noch nirgendwo gesehen, dass das jemand benötigt hätte. Sonst muss ich dafür CSV nehmen
Vorgehen wäre dann also:
mit glob() die Verzeichnisnamen einsammeln
Die .ht_menu-Datei holen und auslesen
wenn da, dann schauen, welcher Verzeichnisname in der .ht_menu-Datei vorhanden ist
wenn er nicht vorhanden ist, wird er hinten angehängt. Oder sollte man ihn weglassen,
um damit auch nicht mehr angezeigte (aber noch vorhandene) Seiten zu ermöglichen?
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Moin,
Im simpelsten Fall sind dort nur die Unterverzeichnisnamen mit LF umgebrochen abgelegt. Aber auch denkbar wäre eine zentrale ".menu"-Datei, die eine Serialisiertes Datenfeld der gewünschten Struktur beinhaltet, von Nöten. Redundanz in Form von http://test/7_Begriff/0_Begriff/22_Begriff/Begriff.php entfiele dabei, da die Reihung aus der ".menu"-Datei resultiert.
Die Redundanz ist damit nicht aufgehoben. Ich muss den Verzeichnisnamen trotzdem einmal in der Verzeichnisstruktur anlegen und einmal (ggf. mit seinem Anzeigenamen) in die Menudatei eintragen.
mit glob() die Verzeichnisnamen einsammeln
Ach so war die Redundanz zu verstehen. Wenn Du eh mit glob() arbeiten wills, dann würde ich dort wieder einen anderen Weg gehen der auch diese Redundanz überflüssig macht:
Setze ein Script, ohne Namenserweiterung (.php) ins Wurzelverzeichnis,
sorge entweder mit der SSI-Konfigurationsdirektive XBitHack oder ForceType für die Ausführung des Scripts und
arbeite mit $_SERVER["PATH_INFO"].
Beispiel:
/wurzelverzeichnis
|
|-/.ht_webstruktur
| |
| |-/MenüpunktX.0
| | |
| | |-/UntermenüpunktX.0
| | |
| | |-/UntermenüpunktY.1
| | |
| | -[usw.] | | | |-/MenüpunktY.1 | | |
-[usw.]
|
`-web
Filenamen mit Umlauten lassen sich sowohl unter Linux als auch unter Windows mit PHP oder FTP anlegen nur mit Leerzeichen kann es zu Problemen kommen, die man mit str_replace('_',' ',$globausgabe[$x]); geradebügeln kann.
Ein Verweis würde im Beispiel so aussehen können http://test/web/MenüpunktX/UntermenüpunktY/begriff.htm
Dabei würde nun das PHP-Script namens "web" $_SERVER["PATH_INFO"] parsen (explode('/',$_SERVER["PATH_INFO"]) und verzeichnisweise mit globe("MenüpunktX.*") sowohl die existens, als auch die nicht übermittelte Position ermitteln. Dabei wird im versteckem Verzeichnis ./.ht_webstruktur mit der Suche begonnen.
Das ganze läßt sich auch mit mod_rewrite erledigen ;)
Gruß aus Berlin!
eddi