Felix Riesterer: Icons

Beitrag lesen

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.