Dynamisches Menu mit PHP

In den Quicktips zum Programmieren von Websites von csswizardry.com ist ein Tip, dass man mehrmals benutzte Teile in eine Datei auslagern soll und dann über include einfügen.

Als Paradebeispiel hierfür steht natürlich das Navigationsmenu. Es sollte ja auf jeder Seite gleich aussehen und die Links ändern sich ja auch nicht. Ausserdem hat es mich schon immer genervt, wenn sich der Titel eines Links ändert oder ein zusätzlicher eingefügt wird, es auf jeder Unterseite ausbessern zu müssen.

Mein Problem hierbei war, dass ich die momentane Seite gerne über das Navigationsmenu kenntlich mache und es auch nicht für sinnvoll halte, auf die gerade angezeigte Seite selbst zu verlinken. Deshalb sieht der Quelltext auf jeder Seite anders aus. Da er sich aber immer auf die gleiche Art ändert, muss es ja möglich sein, das zu automatisieren.

Zuerst muss das Script wissen, auf welcher Seite es sich befindet. Also kommt ein

$current_page = "Home";

noch über den DOCTYPE an den Anfang der Datei, um eine Variable mit dem Namen der aufgerufenen Seite zu haben. Das ist zusätzlich noch ganz nützlich, um jeder Seite einen eigenen Titel zu geben. Dazu einfach im head die Variable ausgeben lassen:


In die php-Datei, die das Menu erstellt (ganz einfallsreich: menu.php) wird ein Array mit der Struktur der Navigation erstellt wobei der erste Eintrag den Namen des Menupunktes und der zweite Eintrag den Dateinamen festlegt:

$menu_data = array(
 "Home"    		=> array("Home", "/"),
 "Galerie"     => array("Menupunkt1", "seite1"),
 "Kontakt"    	=> array("Menupunkt2", "seite2"),
 "Anfahrt"    	=> array("Menupunkt3", "seite3"),
 );

Der Code soll am Ende so aussehen, in dem Beispiel auf der Seite „Home“:

<nav>
<ul>
<ul>
<ul>
	<li class="active">Home</li>
</ul>
</ul>
</ul>
&nbsp;
	<li>Menupunkt 1</li>
	<li>Menupunkt 2</li>
	<li>Menupunkt 3</li>
</nav>
Das alles speichere ich in der Variable $navi
<nav>
<ul>
<ul>\n"; foreach ($menu_data as $key =&gt; $value) { $navi .= " &lt;li"; if($key != $current_page) { $navi .= "&gt;</ul>
</ul>
"; } else {$navi .= " class='active'&gt;"; } $navi .= $value[0]; if($key != $current_page) { $navi .= "
<ul>
<ul>"; } else {$navi .= ""; } $navi .= "</ul>
</ul>
\n"; } $navi .= "

</nav>"; ?&gt;

Jetzt wird noch die menu.php in die index.php eingebunden und dann die Variable an der richtigen Stelle ausgegeben.


&lt;!doctype html&gt;Seitenname - &lt;?php echo $current_page; ?&gt;
...
...

...


Date
Categories
Tags
Permalink
Status

Veröffentlicht:6. Juni 2012

Allgemein Blog

Bookmark the permalink

Kommentieren oder einen Trackback hinterlassen: Trackback-URL


Einen Kommentar hinterlassen

Your email is never published nor shared. Erforderliche Felder sind mit * markiert

Sie können diese HTML-Tags und -Attribute verwenden <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*
*