phpbar.de logo

Mailinglisten-Archive

[php] Navigation Anzeige - wie den richtigen Zweig aufklappen?

[php] Navigation Anzeige - wie den richtigen Zweig aufklappen?

Dennis Sterzenbach php at radds.de
Sam Jul 23 13:26:55 CEST 2005


Hi,

Botzenhart Stefan wrote:
> Meine Frage hier ist, wie kann ich das ressourcenschonender
> organisieren. Vor allem in Hinsicht auf den angesprochenen Treewalker
> und den Heap-Cache.
Ohne Rekursionen ist es natürlich resourcenschonender.
Deshalb schlage ich Nested Sets vor (s.u.)

> Gibt es da fertige Funktionen die das erledigen?
> Muss ich meinen Id/Parent-id Beziehungen auf bestimmte Weise in das
> Array speichern und wie kann ich solch eine Struktur performant
> zwischenspeichern?
Eine Lösung für deine Herausforderung ist möglich über Nested Sets. Die
sind für Lesezugriff besser geeignet, du kannst das kombinieren mit den
erforderlichen Berechtigungsprüfungen (z.b. sowas wie INNER JOIN rechte
ON ... AND rechte.edit=1...) und erhältst über einen simplen COUNT()
Befehl die Tiefe (Ebene) des jeweiligen Eintrags.
Wenn man das geschickt genug kombiniert mit Order-Flags, kann man so mit
einem einzelnen SQL die Gesamtstruktur direkt auslesen ohne zusätzliche
Rekursion o.ä

ID->ParentID dagegen sind sehr aufwändig beim Lesezugriff und deshalb
für größere Strukturen (z.B. Threadansichten, mehrfach geschachtelte
Strukturen, Strukturen mit Abhängigkeiten...) und zeitkritische Dinge
weniger gut geeignet.
Dafür haben Nested Sets halt den Nachteil des größeren Kostenaufwands
beim Aufbau der Struktur.

Es gibt für Menüs ansonsten aber auch Lösungen bei PEAR (HTML_TreeMenu
oder so ähnlich, glaub ich).

Viele Grüße
-- 
  Dennis Sterzenbach

php::bar PHP Wiki   -   Listenarchive