Xava: Immer noch Probleme mit unserer Fotogalerie

Beitrag lesen

Hallo Enrico

[1] Abbildung einer Verzeichnisstruktur als Menü

Zu [1]

Eine komplette Verzeichnisstruktur am Bildschirm auszugeben funktioniert
nun, nur nicht deren Umsetzung als dynamisch erzeugtes Menü.

Um das Problem verständlicher zu machen, möchte ich hier noch einmal weiter "ausholen":

Meine Ordnerstruktur sieht (auszugsweise) so aus:

[...]
Diese Ordnerstruktur soll später - bezüglich der Ordnernamen
natürlich noch bearbeitet - als Hauptmenü dargestellt werden.

Unterhalb dieser Ordner befinden sich unterschiedlich viele und
u.U. noch weiter verschachtelte Ordner.

Beispiel (auszugsweise):

[...]

Jeder Unterordner soll zum darüberliegenden Ordner einen Menüpunkt
repräsentieren, so dass das Menü (bearbeitet) so aussehen soll:

Menüpunkt "Tina"
   Menüpunkt "Einzelfotos"
      Menüpunkt "Kinderfotos"
      Menüpunkt "Einschulung"
   Menüpunkt "Tina & Schatzi"

Menüpunkt "Familie"
  Menüpunkt "Mama Brigitte"
  Menüpunkt "Papa Gerhard"

Die Menüs werden dann über Javascript angezeigt und gewechselt:

<script type="text/javascript">
  <!--
    function show (divid)
    {
[...]
    }
  //-->
</script>

<a href="#" onclick="show('Tina')">Tina</a><br>
<div id="Tina" style="display:none">
  <a href="#" onclick="show('TinaEinzelfotos')">Einzelfotos</a><br>
  <div id="TinaEinzelfotos" style="display:none">
[...]
Diese Menüstruktur soll nun 1:1 anhand der Ordnerstruktur am
Bildschirm abgebildet werden.

Aus deinen obigen Angaben habe ich mal Folgendes programmiert. (Geht bestimmt noch effizienter und besser.) Ich hoffe, ich habe dein Posting richtig verstanden.

Nur bin ich nicht der JavaScript-Fachmann... Aber bei mir funktioniert deine JS-Funktion nicht.

An deiner Stelle würde ich jedoch in diesem Fall auf JavaScript verzichten und das Auf- und Zuklappen der Menü-Punkte mit PHP realisieren.

/****** Quellcode ***************************************************
   function getDirectoryAsArray($path) {
       $handle = @opendir($path);
       while ($file = @readdir ($handle)) {
           if (preg_match("/^.{1,2}$/", $file))
              { continue; }

if(is_dir($path.$file))
              { $dir[$file] = getDirectoryAsArray($path.$file."/"); }
           else
              { $dir[] = $file; }
       } // Ende: while-Schleife

@closedir($handle);
       return $dir;
   } // Ende: function getDirectoryAsArray()

function makeMenu($directory_tree, $pre = "", $quote = "0") {
      $var["javascript"] = "";
      $var["html"] = "";

foreach($directory_tree as $k => $v) {
         if(is_array($v)) {
            $tab = "";
            for ($i=0; $i<$quote; $i++)
               { $tab .= " "; }
            if (count($v)>0) {
               $var["html"] .= $tab."<a href="#" onclick="show('".$pre.$k."')">".$k."</a><br />\n";
               $var["html"] .= $tab."<div id="".$pre.$k."" style="display:none">\n";
               $var["javascript"] .= "      d.getElementById("".$pre.$k."").style.display = "none";\n";
               $tmp = makeMenu($v, $pre.$k, ($quote+3));
               $var["html"] .= $tmp["html"];
               $var["javascript"] .= $tmp["javascript"];
               $var["html"] .= $tab."</div>\n";
            } else {
               $var["html"] .= $tab."<a href="#">".$k."</a><br />\n";
            }
         }
      } // Ende: foreach-Schleife

return $var;
   } // Ende: function makeMenu()

$pfad = "/";       // Muss mit '/' enden.

$verzeichnis_baum = getDirectoryAsArray($pfad);
  $menue_daten = makeMenu($verzeichnis_baum);

$menue_daten["javascript"] = "<script type="text/javascript">\n"
                              ."  <!--\n"
                               ."   function show (divid) {\n"
                              .$menue_daten["javascript"]
                              ."      d.getElementById(divid).style.display = "inline";\n"
                              ."    }\n"
                              ."  //-->\n"
                              ."</script>\n";

echo "<html>\n";
   echo "<head>\n";
   echo $menue_daten["javascript"];
   echo "</head>\n";
   echo "<body>\n";
   echo $menue_daten["html"];
   echo "</body>\n";
   echo "</html>\n";