Lieber Dennis,
Handelt es sich bei diesem Dateibaum um einen statischen oder einen dynamisch generierten? Wenn er dynamisch ist: Hast du zufällig grad noch einen Code-Schnipsel parat, der herrausfindet, welche Grafik vor welche Datei gehört? :->
Der Dateibaum wird per PHP als assoziatives Array eingelesen und als verschachtelte <ul> ausgegeben (siehe unten). Das Array sieht dann z.B. so aus:
$verzeichnisse = array (
"images" => array (
"icons" => array (
"wmp.gif" => "",
"txt.gif" => "",
"default.gif" => "",
),
"logo.gif" => "",
"bild.gif" => "",
),
"download" => array(
"anleitung.pdf" => "",
"animation.avi" => "",
),
);
Das Script sieht so aus:
// Funktion für die Dateibaum-Liste
function explorer_vorbereiten($verzeichnisse, $pfad)
{
$tabs = preg_replace("/[^\/]*(\/)[^\/]*/", "\t", $pfad);
$liste = $tabs."<ul>\r\n";
foreach($verzeichnisse as $stamm => $zweig)
{
$flag = "datei";
if($stamm != "0")
{
if(is_array($zweig))
{
uksort($zweig, "ordner_zuerst");
$flag = "ordner";
$pfad .= $stamm."/";
$liste .= $tabs."\t<li".' class="zu" onclick="aufzu(this)"><img src="icons/folder.gif" alt="icon" />'.$stamm."\r\n";
$liste .= explorer_vorbereiten($zweig, $pfad, $liste);
$pfad = substr($pfad, 0, strlen($pfad) - strlen($stamm)-1);
$liste .= $tabs."\t</li>\r\n";
}
else
{
$typ = substr($stamm, strrpos($stamm, ".")+1);
if(strrpos($stamm, ".") < 1)
{
$liste .= "$tabs\t<li".' class="zu" onclick="aufzu(this)"><img src="icons/folder.gif" alt="icon" />'.$stamm;
$liste .= "\r\n$tabs\t\t<ul>\r\n$tabs\t\t</ul>\r\n$tabs\t</li>";
}
else
{
$filetype = substr($stamm, strrpos($stamm, ".")+1);
$liste .= $tabs."\t<li".' class="file">'.hole_icon($filetype)."$stamm</li>\r\n";
}
}
}
}
$liste .= $tabs."</ul>\r\n";
return $liste;
}
// Funktion zum Zuordnen eines passenden Fileicons zum Dateityp
function hole_icon($kuerzel)
{
$icon_datei = "";
$icons = array(
"dir" => 'folder.gif',
"doc" => 'doc.gif',
"rtf" => 'doc.gif',
"dat" => 'dat.gif',
"css" => 'dat.gif',
"default" => 'default.gif',
"gif" => 'img.gif',
"jpg" => 'img.gif',
"jpeg" => 'img.gif',
"png" => 'img.gif',
"htm" => 'htm.gif',
"html" => 'htm.gif',
"inc" => 'inc.gif',
"js" => 'js.gif',
"vbs" => 'js.gif',
"htc" => 'js.gif',
"mov" => 'mov.gif',
"mp3" => 'mp3.gif',
"pdf" => 'pdf.gif',
"php" => 'php.gif',
"ppt" => 'ppt.gif',
"pps" => 'ppt.gif',
"rar" => 'rar.gif',
"txt" => 'txt.gif',
"asf" => 'wmp.gif',
"asx" => 'wmp.gif',
"wma" => 'wmp.gif',
"wmv" => 'wmp.gif',
"avi" => 'wmp.gif',
"mpg" => 'wmp.gif',
"mpeg" => 'wmp.gif',
"xls" => 'xls.gif',
"xml" => 'xml.gif',
"zip" => 'zip.gif',
);
if(array_key_exists($kuerzel, $icons))
{
$icon_datei = $icons[$kuerzel];
}
else
{
$icon_datei = $icons["default"];
}
return '<img src="/html/images/icons/'.$icon_datei.'" alt="icon" />';
}
// Callback-Funktion für das Sortieren des Verzeichnisse-Arrays damit die Ordner immer zuerst stehen
function ordner_zuerst($key1, $key2)
{
$flag = 0;
if(strrpos($key1, ".")) $flag = $flag + 1;
if(strrpos($key2, ".")) $flag = $flag + 2;
if($flag > 0) return ($flag > 1) ? -1 : 1;
return strcmp($key1, $key2);
}
Möge es Dir helfen. Wenn Du noch die "Faltfunktion" des Baumes möchtest, dann kann ich Dir das komplette admin-script mailen, in welchem auch alle Eventhandler ausgegeben werden, sowie die zugehörigen Javascript-Funktionen enthalten sind. Es gehört nämlich zu der Baumansicht ein CSS dazu, dass erst das richtige "Explorer-Feeling" aufkommen lässt.
Liebe Grüße aus Ellwangen,
Felix Riesterer.