einfaches PHP Navigations Menü Skript erweitern

Eracer120

Grünschnabel
Hallo,
Ich bin ein anfänger was PHP und co. angeht und brache Hilfe bei einem Skript.
PHP:
<?php
$menu = array(
    "home"      => array("Home",        "/",		   ),
    "forum"     => array("Forum",       "/forum.php",  ),
    "mediathek" => array("Mediathek",   "/mediathek/", ),
    "teamspeak" => array("Teamspeak 3", "/teamspeak/", ),
);
                                    $nav  = "<nav><ul>\n";
foreach ($menu as $key => $value) { $nav .= "<li>";
if($key != $current_page) {         $nav .= "<a href='".$value[1]."'    >".$value[0]."</a>";}
else {                              $nav .= "<a href='#' class='current'>".$value[0]."</a>";}
                                    $nav .= "</li>\n";}
                                    $nav .= "</ul></nav>";
echo $nav
?>
Das Skript in sein jetzigen zustand funktioniert zu 100%. Ich möchte es um ein Untermenü erweitern. So soll es im HTML Code aussehen.
vorher:
HTML:
<nav>
    <ul>
        <li><a href="/">Home</a></li>
        <li><a href="/forum.php">Forum</a></li>
        <li><a href="/mediathek/">Mediathek</a></li>
        <li><a href="/teamspeak/">Teamspeak 3</a></li>
    </ul>
</nav>
nacher:
HTML:
<nav>
    <ul>
        <li><a href="/">Home</a></li>
        <li><a href="/forum.php">Forum</a></li>
        <li><a href="#">Mediathek »</a>
            <ul>
                <li><a href="/mediathek/">Mediathek</a></li>
                <li><a href="/mediathek/gallery.php">Bildergalerie</a></li>
            </ul>
        </li>
        <li><a href="/teamspeak/">Teamspeak 3</a></li>
    </ul>
</nav>
Was ich bis jetzt im Internet gefunden habe konnte ich nicht zum laufen bringen, Bitte hilft mir dieses Skript zu erweitern.
Nested Sets und andere Lösungen sind mir zu schwer.
 
Zuletzt bearbeitet:
Hey Eracer120,

das einfachste dein Problem zu lösen, ist wahrscheinlich ein weiteres Array in "mediathek" zu packen nach dem selben Schema wie die anderen Links, dann abfragen, ob ein Untermenü existiert und wenn ja, dann einfach die ähnliche Schleife verwenden wie für das Hauptmenü.

PHP:
$submenu = array(
    "mediathek" => array("Mediathek",         "/mediathek/"),
    "bildergalerie" => array("Bildergalerie", "/mediathek/gallery.php")
);
$menu = array( 
    "home"         => array("Home",     "/"          ), 
    "forum"         => array("Forum",   "/forum.php" ), 
    "mediathek" => array("Mediathek >>","#", $submenu), 
    "teamspeak"=> array("Teamspeak 3",  "/teamspeak/") 
);

$nav  = "<nav><ul>\n";
foreach ($menu as $key => $value) {
   $nav .= "<li>"; 
   if($key != $current_page) { 
      $nav .= "<a href='".$value[1]."'    >".$value[0]."</a>";
      if($value[2]) {
         $nav .= "<ul>";
         foreach ($value[2] as $subkey => $subvalue) {
            $nav .= "<li>"; 
            if($subkey != $current_page) { 
               $nav .= "<a href='".$subvalue[1]."'>".$subvalue[0]."</a>";
            } else {
               $nav .= "<a href='#' class='current'>".$subvalue[0]."</a>";
            } 
            $nav .= "</li>\n";
         }
      }
   } else {
      $nav .= "<a href='#' class='current'>".$value[0]."</a>";
   } 
   $nav .= "</li>\n";
} 
$nav .= "</ul></nav>"; 
echo $nav;

Ist ungetestet!

Guten Rutsch wünsche ich! ;)
Mainz007
 
Danke für deine Antwort, ich habe dein Skript getestet und habe einen entscheidenden Fehler gefunden.
Zur zeit bekomme ich diese HTML Ausgabe:
HTML:
<nav><ul>
 <li><a href="#" class="current">Home</a></li>
 <li><a href="/forum.php">Forum</a></li>
 <li><a href="#">Mediathek &gt;&gt;</a>
  <ul>
   <li><a href="/mediathek/">Mediathek</a></li>
   <li><a href="/mediathek/gallery.php">Bildergalerie</a></li>
   <li><a href="/teamspeak/">Teamspeak 3</a></li>
  </ul>
 </li>
</ul></nav>
Der Menüpunkt Teamspeak 3 soll als Hauptmenüpunkt angezeigt werden. Nach meinem Verständnis sollte deine Lösung so funktionieren, macht es nur nicht.

Dir auch einen guten rutsch ins neue Jahr.
 
Hey Eracer120,

wenn ich das richtig sehe fehlt nur das End-ul-tag für das Submenu. Füg also nach der inneren foreach-Schleife (also die für das Submenu) noch das End-tag hinzu:
PHP:
.
:
            } else { 
               $nav .= "<a href='#' class='current'>".$subvalue[0]."</a>"; 
            }  
            $nav .= "</li>\n"; 
         }
         $nav .= "</ul>\n";
.
:

Sollte damit alles richtigs ein, dann setz den Beitrag auch bitte auf gelöst ;)

Schöne Grüße,
Mainz007
 
Zurück