Dynamisches Menü in PHP welches nicht auf sich verweist. | 24. May 2004 um 00:00 Uhr /

Es sollte mittlerweile bekannt sein dass es nicht empfehlenswert ist auf die Seite zu verlinken auf welcher sich der Besucher gerade befindet. Warum das so ist kann man auf Jakob Nielsens Seite nachlesen.

Die Schwierigkeit dabei liegt darin dass das Menü auf jeder Seite anders aussieht. Man muss je nach dem welche Seite geladen ist an einer anderer Stelle das <a href="ziel.html"></a> raus lassen. Man könnte jetzt in jede HTML Datei ein angepasstes Menü einfügen. Doch was ist wenn man nach einiger Zeit feststellt dass man doch noch gerne einen Menüpunkt dazu haben möchte, hunderte von Seiten von Hand nacheditieren? Nein, wir wollen versuchen so viel wie möglich zu automatisieren, auszulagern und zentral für alle Seiten zu verwalten.

Menü-Einträge Array

<?php
$menu_data = array(
 "aktuell"    => array("Aktuell", "/"),
 "person"     => array("Zur Person", "/person.html"),
 "artikel"    => array("Artikel", "/artikel/"),
 "service"    => array("Service", "/service/"),
 "links"      => array("Links", "/links.html"),
 "impressum"  => array("Impressum", "/impressum.html")
 );
?>

Als erstes erstellen wir uns ein zweidimensionales Array welches alle Informationen zu den einzelnen Menüpunkten enthält. Jede Zeile des obigen Codes stellt einen Menüpunkt dar.

"artikel" => array("Artikel", "/artikel/"),

Der Schlüssel "artikel" in der ersten Dimension bezeichnet die Seite. Man könnte da jetzt auf die Bezeichnung verzichten und PHP numerische Werte für diese Schlüssel geben lassen aber ich finde es so schöner für den Menschen der es sich dann, wenn es dazu kommt diese Schlüssel auf den einzelnen Seiten zu vergeben, viel leichter tut und nicht so einfach durcheinander kommt wie mit nichts sagenden Zahlen.

Der Wert array("Artikel", "/artikel/") enthält wiederum ein Array welches aber keine einzelnen Schlüssel mehr hat sondern nur noch Werte beinhaltet. Die Schlüsselnamen vergibt PHP jetzt automatisch und man kann mit [0] auf »Artikel«, welcher den Linktext beinhaltet, und mit [1] auf »/artikel/«, welcher das href="" Attribut beinhaltet, zugreifen.

Das ganze machen wir jetzt für jeden einzelnen Link und zwar nach der Reihenfolge wie wir die Links haben wollen. Wenn jetzt nach einiger Zeit ein neuer Link dazu kommen sollte müssen wir ihn nur noch an dieser einzelnen Stelle einfügen.

In jeder Datei

<?php
 $current_page = "artikel";
 include('menue.php');
?>
… Kopfdaten der Seite …
<?php echo $navi ?>
… Body der Seite …

Jetzt kommen wir zum Kern unserer Problemlösung. Als erstes muss ich noch anfügen dass wir in jede unserer Dateien die Variable $current_page rein schreiben müssen. Sie muss noch vor dem include() Befehl stehen mit welchem wir unser Menü einfügen. Der Eintrag sollte am besten ganz oben in der Datei stehen und etwa so wie oben aussehen. Danach kommen Alle Daten die vor dem Menü ausgegeben werden. Mit dem Befehl echo $navi geben wir das Menü aus. Alles was danach kommt können wir in gewohnter Weise darunter schreiben.

Die Menü-Schleife

<?php
$navi = "<ul>\n";
 foreach ($menu_data as $key => $value) {
  $navi .= " <li>";
    if($key != $current_page) {
     $navi .= "<a href='".$value[1]."'>";
    }
   $navi .= $value[0];
    if($key != $current_page) {
     $navi .= "</a>";
    }
   $navi .= "</li>\n";
 }
$navi .= "</ul>";
?>

Jetzt setzen wir das Menü in einer Schleife zusammen. Wir speichern alle Ausgaben erst einmal in der Variablen $navi um sie erst dann an der richtigen Stelle in unserer Seite auszugeben. Der Punkt vor dem Ist-gleich Zeichen sagt aus dass alles was dahinter ist an die Variable angehängt wird. Ansonsten würde sie überschrieben.

foreach ($menu_data as $key => $value)

Die Schleife durchlaufen wir für jeden einzelnen Schlüssel aus dem Array $menu_data. Der Inhalt des Schlüssels (im obrigen Beispiel "artikel") wird für jeden einzelnen Durchgang von neuen in die Variable $key reingeschrieben. Der Wert wiederum (oben array("Artikel", "/artikel/")) wird in die Variable $value rein geschrieben. Man beachte dass diese bei jedem einzelnen Schleifendurchgang mit neuen Werten überschrieben werden.

if($key != $current_page)

Nachdem wir in der Variable $current_page abgespeichert haben auf welcher Seite sich das Menü jetzt befindet können wir bei jedem Schleifendurchgang überprüfen ob der Menüpunkt zur aktuellen Seite gehört und falls nicht <a href='".$value[1]."'> anhängen. In $value[1] steht ja bekanntlich der Pfad zum dazugehörigen Link. Genau so verfahren wir dann, nachdem wir den Linktext $value[0] angehängt haben, mit dem hinteren Teil </a>.

Unser Menü ist Fertig

Jetzt haben wir ein Menü dass sich durch die Zentrale Lage leicht pflegen lässt und nicht auf die Seite selbst verweist wo es eingesetzt ist. Dieses kann man jetzt natürlich mittels CSS so formatieren wie man es haben will. Für Anfänger in Sachen CSS sicherlich interessant der Listamatic von Maxdesign.

Dieses Script bei @ PHP-Resource.de bewerten:


Pingbacks

  1. frische-zitronen.de » Dynamisches PHP-Menü und kleine Webseitenvorlage
  2. first steps with php | cptmeti

Kommentare

Die Kommentare sind für diesen Eintrag geschlossen.