Ich bin daran interessiert, wie andere Leute mit der Navigation in Webseiten umgehen. Nicht der Styling- oder Usability-Teil, sondern der Generierungsteil. Die meisten Websites haben eine Art "Navigationsbaum", der in Form einer oder mehrerer Menüebenen angezeigt wird - in welcher Form speichern und verarbeiten Sie diesen Baum? Die einfachste Lösung ist eine statische Menüvorlage, etwa so:
%Vor%Aber das ist nicht sehr flexibel. Sie können nicht einfach die aktuelle Seite im Menü markieren und es gibt keine einfache Möglichkeit, einen Teil der Menüstruktur abhängig von der aktuellen Seite ein- oder auszublenden. (Oder ist es?)
Ich habe einen Navigationsbaum entwickelt, etwa so:
%Vor% Dieser Baum wird von einer speziellen Navigation
-Klasse geladen, die abhängig vom aktuellen Anfragepfad Teile der Navigation bedienen kann. Das scheint ein bisschen besser zu funktionieren, aber ich bin immer noch sehr neugierig auf die Lösungen anderer Leute.
MySQL hat einen Artikel mit dem Titel "Hierarchische Daten in MySQL verwalten" , den ich zuvor hatte gefunden, um ziemlich unbezahlbar zu sein. Es beschreibt zwei gebräuchliche Techniken zum Speichern der dynamischen Navigation und ihrer Einschränkungen.
Vielleicht findest du eines meiner Module nützlich: CatalystX :: Menu :: Suckerfish
Die Menüstruktur wird aus Methodenattributen generiert. Es fehlt eine Möglichkeit, den Status des Menüeintrags der aktuellen Seite zu ändern, aber das sollte nicht schwierig hinzuzufügen sein.
Die Methodenattribute sind willkürliche Zeichenfolgen MenuPath und MenuTitle, die einen durch Schrägstriche getrennten Pfad für die Menüoption in der Struktur und eine Zeichenfolge angeben, die als Menüoptionsmarkierung und gegebenenfalls als HTML-Titelattribut verwendet wird.
Wir verwenden einen Ansatz ähnlich dem Ihren mit der Menühierarchie, die in der Datenbank gespeichert ist. Es wäre schön, stattdessen die Menüstruktur basierend auf den Versandmethoden automatisch zu generieren, aber es gibt weitere Vorteile für den DB-Ansatz. Zum Beispiel können wir den Zugriff ändern / einschränken, ohne die Anwendung neu zu erstellen, und wir können Menüelemente erstellen, die nicht dem Dispatch-Baum zugeordnet sind, z. B. externe Links. Wir können auch beliebig lange Beschriftungen bereitstellen, die nicht unbedingt dem Versandpfad zugeordnet sind, um den Menschen die Arbeit zu erleichtern.
Der Hauptnachteil (abgesehen davon, dass der Dispatcherbaum dupliziert werden muss) ist, dass die Verwaltung der hierarchischen Daten in MySQL ein wenig peinlich ist. Siehe cballous Antwort für eine gute Quelle zu diesem Thema.
Wenn es darum geht, Teile des Baumes anzuzeigen und zu verstecken, ist CSS dein Freund.
Zum Beispiel kann Ihr Früchte-Untermenü
sein id="fruitmenu"
Sie legen alle Untermenüs auf
fest display:none;
oben auf Ihrem Stylesheet.
Dann verwenden Sie eine ID im Body-Tag jeder Seite, um sie gemäß einer spezifischeren Regel sichtbar zu machen.
So zum Beispiel auf Ihrer Obstseite, die
hat <body id="fruitpage">
Das Obst-Untermenü ist sichtbar, da es von einer Regel wie
gesteuert wird #fruitpage #fruitmenu {display:block;}
SQL Server 2008 hat einen raffinierten neuen Datentyp namens "HierarchyID", der ein Los von den Kopfschmerzen des Arbeitens mit hierarchischen Daten wegnimmt.
Die Google Webmaster-Tools bieten einige nützliche Ideen und Unterstützung beim Erstellen und Verwalten von Sitemaps:
Tags und Links perl navigation