Rekursive Verzeichnisauflistung (PHP, XHTML, CSS und jQuery)
suit
- html
Guten Tag: nachdem ich unbedingt einen entsprechenden Verzeichnisbaum für eine Website benötigt habe im Netz aber nichts Ansprechendes zu finden war, hab' ich auf die schnelle etwas geschrieben.
Wenn mich die Motivation packt gibt's ggf. noch einen Artikel der das ganze nochmal etwas beschreibt - z.B. wie man das Ding einfach erweitern kann.
Möglich ist etwa ein Drag&Drop um Verzeichnisse oder Dateien zu verschieben oder das Umbenennen einzelner Knoten.
Features:
Wie auch immer: seht euch die Sache einfach an, bei Gefallen darf die Sache natürlich gerne (auch kommerziell) genutzt werden.
statisch es html (demo)
live mit PHP aus dem Verzeichnis generiert (demo)
Quelltexte (.tar.gz)
Hello,
Guten Tag: nachdem ich unbedingt einen entsprechenden Verzeichnisbaum für eine Website benötigt habe im Netz aber nichts Ansprechendes zu finden war, hab' ich auf die schnelle etwas geschrieben.
Wenn mich die Motivation packt gibt's ggf. noch einen Artikel der das ganze nochmal etwas beschreibt - z.B. wie man das Ding einfach erweitern kann.
gefällt mir schon ganz dolle :-)
Hast leider nur noch einen gefährlichen Denkfehler im PHP-Teil drin:
function get\_tree($dir = './') {
$tree['dir'] = array();
$tree['file'] = array();
$handle = @opendir($dir);
while(($file = @readdir($handle)) !== false) {
if ($file != '.' && $file != '..') {
$dir = preg\_replace('/^(.\*)\/+$/', '$1', $dir);
$name = $file;
$path = $dir . '/' . $file;
if (is\_dir($path)) {
$tree['dir'][] = array(
'name' => $name,
'type' => 'dir',
'path' => $path,
'data' => get\_tree($path)
);
} else if (is\_file($path)) {
$tree['file'][] = array(
'name' => $name,
'type' => fileinfo($path),
'path' => $path
);
}
}
}
sort($tree['dir']);
sort($tree['file']);
return array\_merge($tree['dir'], $tree['file']);
}
Diese Funktion ist nicht linkfest. Das bedeutet, dass sie sich aufhängen wird, wenn ein Verzeichnislink auf eine höhere Verzeichnisebene verweist.
Dies solltest Du auf jeden Fall korrigieren.
1. Möglichkeit: Linkverfolgung unterdrücken
2. Möglichkeit: Mit Sammelarray und Realpath() arbeiten und den (aufgelösten)
Link nur dann verfolgen, wenn er nicht schon im Sammelarray enthalten ist.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hello,
das sind wieder die Leute, die Tabs anstelle von Leerzeichen für die Formatierung benutzen *tztz*
Mal sehen, ob es diesmal klappt:
function get_tree($dir = './') {
$tree['dir'] = array();
$tree['file'] = array();
$handle = @opendir($dir);
while(($file = @readdir($handle)) !== false) {
if ($file != '.' && $file != '..') {
$dir = preg_replace('/^(.*)\/+$/', '$1', $dir);
$name = $file;
$path = $dir . '/' . $file;
## z.B. so:
if ( is_dir($path) and !is_link($path) )
{
$tree['dir'][] = array(
'name' => $name,
'type' => 'dir',
'path' => $path,
'data' => get_tree($path)
);
} else if (is_file($path)) {
$tree['file'][] = array(
'name' => $name,
'type' => fileinfo($path),
'path' => $path
);
}
}
}
sort($tree['dir']);
sort($tree['file']);
return array_merge($tree['dir'], $tree['file']);
}
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Diese Funktion ist nicht linkfest. Das bedeutet, dass sie sich aufhängen wird, wenn ein Verzeichnislink auf eine höhere Verzeichnisebene verweist.
Danke für die Info ;)
To understand recursion, you must first understand recursion :p