Felix Riesterer: Verwirrende verschachtelungen eines Menüs

Beitrag lesen

Lieber Jeena,

  • a
  • b
    -- ba
    -- bb
    -- bc
  • c
    -- ca
    --- caa
    --- cab
    --- cac
    ---- caca
    ---- cacb
    ---- cacc
  • d
    -- da
  • e
  • f

das sieht mir doch sehr nach einem assoziativen Array aus. Ich habe mir mal die Dateistruktur meines Webspaces in ein solches Array umgewandelt, um es dann als eine <ul> auszugeben (Adminbereich, Explorer-Tree).

Ich werde mal nach dem Script kramen und sehen, ob es etwas für Dich ist.

Diese Funktionen habe ich etwas "gesäubert", da Du ja keinen Dateibaum als Explorer-Tree anzeigen möchtest.

  
 // Funktion zum erstellen einer <ul> aus Dateistruktur  
  
    function dateistruktur($verzeichnis_pfad)  
       {  
     // Verzeichnisstruktur ermitteln und als Liste darstellen  
       $alle_dateien = make_tree($verzeichnis_pfad, "all");  
  
       $verzeichnis_array = array();  
  
       for($i=0;$i<count($alle_dateien);$i++)  
          {  
          $alle_dateien[$i] = "html/".substr($alle_dateien[$i], 5);  // das "html/" vorne im Pfad entfernen  
          $alle_dateien[$i] = explode("/", $alle_dateien[$i]);  
          $temp_array = array();  
          while(count($alle_dateien[$i]) > 0)  
             {  
             $test = array_pop($alle_dateien[$i]);  
             if(count($temp_array) > 0)  
                {  
                $temp_array = array($test => $temp_array);  
                }  
              else  
                {  
                $temp_array = array($test => "");  
                }  
             }  
          $verzeichnis_array = array_pad($verzeichnis_array, count($verzeichnis_array)+1, $temp_array);  
          }  
  
       $verzeichnisse = array();  
       foreach($verzeichnis_array as $temp)  
          {  
          $verzeichnisse = array_merge_recursive($verzeichnisse, $temp);  
          }  
  
     // Verzeichnisliste zu einer HTML-Liste wandeln  
       $datei_baum = baum_vorbereiten($verzeichnisse, "/");  // Verzeichnisstruktur als <ul> herstellen  
       return $datei_baum;  
       }  
  
  
 // Funktion für die Dateibaum-Liste (rekursive Funktion!)  
  
    function baum_vorbereiten($verzeichnisse, $pfad)  
       {  
       $tabs = preg_replace("/[^\/]*(\/)[^\/]*/", "\t", $pfad);  
       $liste = $tabs."<ul>\r\n";  
       foreach($verzeichnisse as $stamm => $zweig)  
          {  
          if($stamm != "0")  
             {  
             if(is_array($zweig))  
                {  
                $pfad .= $stamm."/";  
                $liste .= $tabs."\t<li".' class=""><a href="">'.$stamm."</a>\r\n";  
                $liste .= baum_vorbereiten($zweig, $pfad, $liste);  
                $pfad = substr($pfad, 0, strlen($pfad) - strlen($stamm)-1);  
                $liste .= $tabs."\t</li>\r\n";  
                }  
              else  
                {  
                $liste .= $tabs."\t<li".' class=""><a href="">'."$stamm</a></li>\r\n";  
                }  
             }  
          }  
       $liste .= $tabs."</ul>\r\n";  
       return $liste;  
       }  
  
  
 // Funktion für Verzeichnisbaum  
  
    function make_tree($path, $mode)  
       {  
       $list = array();  
       $handle=opendir($path);  
       while($a=readdir($handle))  
          {  
          if(!preg_match('/^\./',$a))  
             {  
             $full_path="$path/$a";  
             switch($mode)  
                {  
                case "all": $list[]=$full_path; break;  
                case "dir": if(is_dir($full_path)) $list[]=$full_path; break;  
                case "file": if(is_file($full_path)) $list[]=$full_path; break;  
                }  
             if(is_dir($full_path))  
                {  
                $recursive=make_tree($full_path, $mode);  
                for($n=0; $n<count($recursive); $n++)  
                   {  
                   $list[]=$recursive[$n];  
                   }  
                }  
             }  
          }  
       closedir($handle);  
       return $list;  
       }  

Möge es von Nutzen sein.

Liebe Grüße aus Ellwangen,

Felix Riesterer.