Da diese Frage ja immer wieder auftaucht habe ich mich gerade mal hingesetzt und ein kleines Script dafür erstellt.
Als erstes wird ein Array für die verfügbaren Navigationspunkte erzeugt. Wenn sich an der Navigation etwas ändert, also Menu-Punkte wegfallen oder neu dazukommen, braucht nur dieser Array erweitert bzw. gekürzt werden:
PHP
// Als Key wird der gewünschte GET-Parameter gesetzt.
// Als Value wird ein Array erstellt mit den Keys "file" für die zu includende Datei und "label" für den Ausgabetext im Menu auf der Seite
$navigation = array(
"home"=>array(
"file" =>"home.php",
"label"=>"Startseite"
),
"seite1"=>array(
"file" =>"seite1.php",
"label"=>"Seite 1"
),
"seite2"=>array(
"file" =>"seite2.php",
"label"=>"Seite 2"
)
);
Alles anzeigen
Mit dem folgenden Code wird überprüft welche Datei eingebunden werden soll:
PHP
// Es wird geprüft ob der GET-Parameter "view" gesetzt ist, falls nicht wird die Startseite geladen
if(!isset($_GET['view'])) {
$view = "home.php";
}
// Wenn der GET-Parameter "view" gesetzt ist wird geprüft ob dieser im Array $navigation als Key vergeben ist, und ob die zugehörige Datei existiert:
// (Pfad zu den inlude-Dateien bei file_exists() und include muss an die eigene Dateistruktur angepasst werden)
elseif(isset($navigation[$_GET['view']]) && file_exists("./include/".$navigation[$_GET['view']]['file'])) {
$view = $navigation[$_GET['view']]['file'];
}
else { // Default-Datei zum includen bei ungültigem GET-Parameter
$view = "page-not-found.php";
}
// include an der passenden Stelle im Script einbinden
include "./include/".$view;
Alles anzeigen
Mit dem folgenden Code wird das Menu zur Ausgabe auf der Seite erzeugt:
PHP
// Für den aktiven Link wird eine CSS-Klasse "active" vergeben.
// Diese kann natürlich bei Bedarf angepasst oder weggelassen werden.
foreach($navigation as $k=>$v) {
if($v['file']==$view) {
// Aktiver Menu-Punkt
echo "<a href='index.php?view={$k}' class='active'>{$v['label']}</a>";
}
else {
// Inaktive Menu-Punkte
echo "<a href='index.php?view={$k}'>{$v['label']}</a>";
}
}
Alles anzeigen