PHP Navigation erstellen

  • Ersteller Ersteller Speedy.
  • Erstellt am Erstellt am
S

Speedy.

Gast
Hallo zusammen,

ich habe eine Webseite für unseren Club geschrieben, welche momentan nur auf HTML und CSS aufbaut. Nun möchte ich die gesamte Seite um PHP erweitern, also die Navigation, den Header und Footer per Include einbinden usw.
Das klappt auch ganz gut, nur ist in der aktuellen Navigation die gerade geöffnete Seite hervorgehoben, was in PHP auch umgesetzt werden soll. Ich habe dafür in der navigation.php folgenden Code verwendet:

Code:
<?php
	$page = $_GET['page'];
	$navActive = 'active';

	if ($page == 'home') {
		$home = $navActive;
	} else {
		$home = '';
	}

	if ($page == 'aktionen') {
		$aktionen = $navActive;
	} else {
		$aktionen = '';
	}

	if ($page == 'about') {
		$about = $navActive;
	} else {
		$about = '';
	}

	if ($page == 'hilfswerk') {
		$hilfswerk = $navActive;
	} else {
		$hilfswerk = '';
	}

	if ($page == 'impressum') {
		$impressum = $navActive;
	} else {
		$impressum = '';
	}
	/*$active = 'active';

	if ($page == 'home') {
		$home = $active;
	} elseif ($page == 'aktionen') {
		$aktionen = $active;
	} elseif ($page == 'about') {
		$about = $active;
	} elseif ($page = 'hilfswerk') {
		$hilfswerk = $active;
	} else ($page = 'kontakt') {
		$kontakt = $active;
	}*/
?>
<!-- Navigation -->
<nav class="align">
<ul>
<li class="<? echo $home; ?>"><a href="index.php?page=home">Home</a></li>
<li class="<? echo $aktionen; ?>"><a href="aktionen.php?page=aktionen">Aktionen</a></li>
<li class="<? echo $about; ?>"><a href="about.php?page=about">Über uns</a></li>
<li class="<? echo $hilfswerk; ?>"><a href="hilfswerk.php?page=hilfswerk">Hilfswerk</a></li>
<li class="<? echo $impressum; ?>"><a href="impressum.php?page=impressum">Kontakt</a></li>
</ul>
</nav> <!-- end Navigation -->

Das klappt auch ganz gut, sobald ein Link einen Titel zugewiesen bekommt. Nur öffnet man nun eine Seite z. B. die index.php ohne das ?page=home hintendran, dann funktioniert die ganze Schleife logischerweise nicht mehr. Was kann ich da machen? Bin ein Anfänger bei PHP, dafür reichen meine Kenntnisse noch nicht aus.
Und die andere Frage - kann man aus den 5 Schleifen oben eine komplette Schleife machen oder das Ganze irgendwie sauberer schreiben?

Danke im Voraus!

Grüße
Speedy

PS: Der Link oben führt euch zu der aktuellen HTML-Seite, da ist noch nix mit PHP
 
auch kleiner tipp
Du kannst

<? echo $home; ?>

durch <?=$home?> abkürzen - sieht einfach etwas übersichtlicher aus ^^
 
Zuletzt bearbeitet:
switch ist dein Freund. http://de2.php.net/manual/de/control-structures.switch.php
Außerdem dreh dein $navActive um, ala "wenn leer, dann home, ansonsten ...".

Aber insgesamt ist das eher eine client-Sache, weshalb du solche Dinge per CSS/JS lösen solltest. Nur weil es mit serverseitig lösbar ist, heißt das nicht, dass das auch Sinn macht.
 
Kannst du mir ein JS-Beispiel dafür zeigen? Ich habe auf dem Gebiet noch weniger Erfahrung.

Edit: Mit switch funktioniert es wie mit der if-Schleife, nur habe ich das selbe Problem wie oben beschrieben. Wie umgehe ich dies?

Code:
<?php
	$page = $_GET['page'];

	switch ($page) {
		case 'home':
			$home = 'active';
			break;
		
		case 'aktionen':
			$aktionen = 'active';
			break;

		case 'about':
			$about = 'active';
			break;

		case 'hilfswerk':
			$hilfswerk = 'active';
			break;

		case 'impressum':
			$impressum = 'active';
			break;

		default:
			# code...
			break;
	}
 
Zuletzt bearbeitet:
Setz' "home" als Standardseite, bzw. in den default-Teil.
 
Hier noch mein Senf dazu:

Es gibt keine If-Schleifen.

Irgendwie sind deine Links komisch. Sie sollten wohl eher alle auf die index.php gehen, wenn du das schon so mit einem Parameter lösen willst.

Die Ausgabe der einzelnen LIs lässt sich sehr gut in eine Schleife (sinnvollerweise in Kombination mit einer Funktion) stecken. Dadurch könntest du dir dieses If-Monstrum komplett sparen.

Ein Ansatz wäre z.B. die möglichen Werte für den GET-Parameter page in eine Liste zu stecken, über diese Liste zu iterieren und jeweils ein LI auszugeben. Dabei kannst du direkt überprüfen, ob das LI, das du gerade ausgeben willst, active sein muss. Dadurch brauchst du letztendlich nur ein if und sparst dir auch die ganzen anderen Variablen ($home, $aktionen, $about, ...).
 
Zurück
Oben