baumstruktur
em_aly
- php
0 Cheatah0 Christian Kruse0 -> bild <- em_aly0 Harry
hallo!
ich programmiere gerade einen file-browser in php.
ich will, das er so aussieht wie der windows-explorer, also so, dass er sich jedesmal aufklappt, wenn ich einen ordner anklicke.
wie löse ich das am besten?
Hi,
wie löse ich das am besten?
da Du vermutlich nicht möchtest, dass bei jedem Klick eine neue Seite vom Server abgerufen wird, der eine Vielzahl Daten übergeben werden müssen, damit der aktuelle Zustand zugrundeliegend bleibt: Mit etwas clientseitigem. Ich würde hier zu Java tendieren, weil das ganze mit JavaScript vierfach programmiert werden müsste.
Cheatah
hi,
es kann auch ruhig jedesmal eine neue seite aufgerufen werden...ich will nur php,javascript und natürlich html verwenden.
Hi,
es kann auch ruhig jedesmal eine neue seite aufgerufen werden...
okay[1]. Und wo genau ist dann Dein Problem? Wenn es daran liegt, dass Du Rekursion noch nicht verstanden hast, empfehle ich Dir, zunächst einmal Rekursion zu verstehen ;-)
Cheatah
[1] Einige entscheidende Vor- und Nachteile wurden ja bereits genannt.
Hi!
Ich würde hier zu Java tendieren, weil das ganze mit JavaScript vierfach programmiert werden müsste.
Was meinst du mit 4-fach??
Grüße
Andreas
Hi,
Ich würde hier zu Java tendieren, weil das ganze mit JavaScript vierfach programmiert werden müsste.
Was meinst du mit 4-fach??
document.all, document.layers, document.getElementById, non-DHTML.
Cheatah
Hallo
Was meinst du mit 4-fach??
document.all, document.layers, document.getElementById, non-DHTML.
Bei geschickter Programmierung beschränkt sich die 4-fache Programmierung auf 4x3 Codezeilen.
Ich denke nicht, dass dies bei einer solchen Sache ein Problem darstellt. Ich habe eine ähnliche Sache in JS umgesetzt mit ca. 600 Zeilen Code. Leider ist die Parametrisierung nicht gerade benutzerfreundlich. Ich stricke sporadisch an einem brauchbaren Interface, leider dauert das aber noch ein Weilchen.
Grüsse
Eisbär
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
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
Hi!
ich will, das er so aussieht wie der windows-explorer,
Warum? Denk dir doch mal was neues aus, was es noch nicht gibt :)
Ist doch für "normale" Windowsbenutzer einfacher wenn es wie bei Ihrem geliebten OS funktioniert!
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.
Wirklich? Ich denke gerade wegen der der Geschwindigkeit ist es doch besser z.B. Javascript zu verwenden, d.h. Deine Arrays... alles eine eingebundene Javascriptdatei zuschreiben, dann sind nämlcih alle Daten einmal auf dem Client, wenn DU nur ein eine Untermenü gehst hast Du die VErzeichnisse direkt alle zur Verfügung, das solte doch schneller gehen, oder?
Ich bin bestimmt kein Javascript-Frund und da auch nicht wirklich talentiert, aber ich denke das es so schneller geht, als immer den Baum neu vom Server zu holen!
Grüße
Andreas
Hallo,
Ist doch für "normale" Windowsbenutzer einfacher wenn es wie bei
Ihrem geliebten OS funktioniert!
Wer sagt das?
Wirklich? Ich denke gerade wegen der der Geschwindigkeit ist es doch
besser z.B. Javascript zu verwenden, d.h. Deine Arrays... alles
eine eingebundene Javascriptdatei zuschreiben, dann sind nämlcih
alle Daten einmal auf dem Client, wenn DU nur ein eine Untermenü
gehst hast Du die VErzeichnisse direkt alle zur Verfügung, das solte
doch schneller gehen, oder?
Nein. Denn es dauert eine ganze Zeit, den kompletten Datei-Baum
auszulesen. Und nicht nur das: es belastet den Server unglaublich.
Immer nur bestimmte Verzeichnisse (nicht rekursiv) auszulesen, ist
sowohl ressourcen-schonender als auch schneller geschehen.
Ich bin bestimmt kein Javascript-Frund und da auch nicht wirklich
talentiert, aber ich denke das es so schneller geht, als immer
den Baum neu vom Server zu holen!
Man holt ja nur einen Teilbaum, nicht den ganzen.
Gruesse,
CK
Hi Christian,
Ist doch für "normale" Windowsbenutzer einfacher wenn es wie bei
Ihrem geliebten OS funktioniert!
Wer sagt das?
die Usability ;-)
Nein. Denn es dauert eine ganze Zeit, den kompletten Datei-Baum
auszulesen.
Das ist eine Sache der Datenstruktur und -menge, der Code-Präsentation, von Caching- und anderen Optimierungs-Mechanismen usw.
Und nicht nur das: es belastet den Server unglaublich.
Die Informationen bei n Requests mit n unterschiedlichen Fällen n Mal zu berechnen ist vermutlich deutlich ressourcenhungriger, als einen allgemeinen Fall entweder einmalig pro Session, oder sogar nur täglich oder noch seltener zu berechnen. Statische Daten kann man auslagern, bei dynamischen Berechnungen fällt das schon deutlisch schwerer.
Der Vorteil der serverseitigen Variante ohne JavaScript liegt ganz einfach darin, dass es bei 100% der User funktioniert, was bei clientseitigen Techniken nie der Fall ist.
Man holt ja nur einen Teilbaum, nicht den ganzen.
Du weißt doch eigentlich sehr gut, dass (optimierte Programmierung vorausgesetzt) der Roundtrip das Teuerste an einer Client-Server-Architektur ist :-)
Cheatah
hallo,
so weit war ich auch schon...nur muss ich das ja in eine tabelle setzen...mein größtes problem ist die anzeige der struktur....
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
Hallo,
so weit war ich auch schon...nur muss ich das ja in eine tabelle
setzen...mein größtes problem ist die anzeige der struktur....
Wo genau soll da das Problem liegen? Liegt es daran, dass du
Rekursivitaet nicht begriffen hast? Liegt es an fehlenden
HTML-Kenntnissen (Einrueckung, Wahl der Elemente, etc)? Glaskugel, wo
bist du?!
Gruesse,
CK
schaut euch mal das bild an...so weit bin ich jetzt schon...
brauche hilfe!!!!
hallo!
ich programmiere gerade einen file-browser in php.
ich will, das er so aussieht wie der windows-explorer, also so, dass er sich jedesmal aufklappt, wenn ich einen ordner anklicke.
wie löse ich das am besten?
Moin
schaut euch mal das bild an...so weit bin ich jetzt schon...
brauche hilfe!!!!
Daraus lässt sich wunderbar erkennen, wo's fehlt ...
In meiner Glaskugel steht wie bei den anderen grade etwas verschwommen "Rekursivität".
Rekursive Funktionen sind Funktionen, die sich selbst aufrufen.
Ich darf dazu etwas Lektüre empfehlen:
http://diuf.unifr.ch/courses/info2b/Transparents/notes11-D.pdf
Und noch mehr:
http://www.google.de/search?sourceid=navclient&hl=de&querytime=WPRXjB&q=Rekursivit�t
Ciao,
Harry
(der echte)