Christian Kruse: baumstruktur

Beitrag lesen

Hallo,

ich will, das er so aussieht wie der windows-explorer,

Warum? Denk dir doch mal was neues aus, was es noch nicht gibt :)

also so, dass er sich jedesmal aufklappt, wenn ich einen ordner
anklicke.

wie löse ich das am besten?

Am sinnvollsten serverseitig. Einfach deshalb, weil du nur so eine
akzeptable Geschwindigkeit sicherstellen kannst -- es waere
schliesslich ziemlich bloed, immer den kompletten Datei-Baum auslesen
zu muessen.

Ok, mal zur Umsetzung. Du definierst ein beliebiges Startverzeichnis.
Dort liest du alle Dateien aus (ja, auch Verzeichnisse sind Dateien).
Den stellst du dar, am besten in einer verschachtelten 'ol' (ordered
list) oder 'ul' (unordered list) -- je nach dem, ob du die Eintraege
sortierst oder nicht. Dann speicherst du das Verzeichnis (im
Session-Environment oder im Query-String, bleibt sich gleich). Und
jedesmal, wenn der User ein neues Verzeichnis aufklickt, musst du
das neu hinzugekommene Verzeichnis zu der Verzeichnis-Liste (im
Query-String oder Session-Environment) hinzufuegen und zusaetzlich
zum Wurzel-Verzeichnis auslesen und darstellen. Ob ein Verzeichnis
ein direktes Kind des vorherigen ist, kannst du problemlos pruefen,
indem du es in seine Einzelpfade zerlegst und eine dementsprechende
Struktur aufbaust. Beispiel: gegeben sind die Verzeichnisse

  • /
  • /html
  • /html/kruse
  • /html/kruse/htdocs
  • /html/nassi
  • /var

Die entsprechende Datenstruktur saehe, in PHP formuliert, jetzt so
aus:

$dirs = Array(
  '/', Array(
    Array('/html',
      Array('/html/kruse'
        Array('/html/kruse/htdocs')
      ),
      Array('/html/nassi')
    ),
    Array('/var')
  )
);

Sieht kompliziert aus, ich weiss :) Ist aber letztenendes ganz
einfach. Fuer jedes Kind-Verzeichnis legst du einen weiteren Array
an, das als erstes Element sich selbst enthaelt. Alle folgenden
Elemente sind Kind-Verzeichnisse des Kind-Verzeichnisses. Gibt es
kein weiteres Kind-Verzeichnis, so hat der Array eben nur ein Element.

Ich hoffe, ich hab mich nicht zu kompliziert ausgedrueckt.

Gruesse,
 CK