Navigation mit PHP
Grundprinzip ist, die Seiten in einzelne Bereiche aufzuteilen, immer wiederkehrende Bereiche in extra Dateien auszulagern und diese an entsprechender Stelle einzubinden.
Praktischerweise bastelt man sich erst einmal eine Seite zusammen, auf der alles schön aussieht, um diese dann zu „zerschneiden”.
Jede Seite wird durch eine eindeutige Variable gekennzeichnet, um damit in der Navigation diese Seite von der Verlinkung auszuschließen und farblich hervorzuheben. Sieht erstens besser aus und ist zweitens auch logisch, auf die aktuelle Seite nicht noch einmal zu verlinken.
Beispiel Schottland-Reisebericht
So sieht es für den Betrachter aus:
index.php im Verzeichnis /reisen/schottland2006/
Ein Blick in den Quelltext zeigt eine ziemlich umfängliche Navigation. Die auf jeder Seite einbinden? Und was ist, wenn noch was dazukommt? Alles wieder anfassen?
Natürlich nicht.
Aufteilen der Seite
index.php
<?php $titel="Schottland 2006"; $menu="start"; require("head.php"); require("menu.php"); ?>
Jetzt gehts los mit <h1>Wir fahren nach Schottland!</h1>
bis zum letzten Absatz
<p class="c"><a class="linkr" href="anreise.php">Anreise</a><a href="#top">Nach oben</a></p>
dann folgt noch das Seitenende:
<?php require("footer.php"); ?>
Erläuterungen
- Die Variable
$titel
wird an entsprechender Stelle im head eingesetzt - die Variable
$menu
wird für die Navigation benötigt - Um ggf. eine Unternavigation einzuführen, gibt es auf manchen Seiten noch eine Variable
$hmenu
, z.B. hier verwendet: Fotoseite zur Haupt-Inhaltsseite. Hier ist der Menüpunkt der dazugehörenden Text-Seite farblich markiert und anklickbar.
benmorefotos.php
fängt dann so an:<?php $titel="Botanischer Garten Benmore"; $menu="benmorefotos"; $hmenu="benmore"; require("head.php"); require("menu.php"); ?>
- Die Dateien
head.php
,menu.php
undfooter.php
werden hier mitrequire
eingebunden, das heißt, die müssen vorhanden sein.include
ginge natürlich auch. - Um die richtigen Pfade muß man sich selber kümmern; hier liegt alles im selben Verzeichnis.
head.php
<?php header('Content-type: text/html; charset=ISO-8859-1'); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="de"> <head> <meta name="description" content="Eine Reise durch Schottland"> <title><?php echo $titel ?></title> <link rel="stylesheet" type="text/css" href="scotch.css" media="screen, projection"> <!--[if IE ]> <link rel="stylesheet" type="text/css" href="ie.css" > <![endif]--> <link rel="shortcut icon" href="/favicon.ico"> </head> <body> <div id="main"><a id="top" name="top"></a>
Erläuterungen:
- Die PHP-Zeile am Anfang sorgt dafür, daß der webserver den gewünschten Zeichensatz ausliefert.
- Im title-Element wird die oben gesetzte Variable eingefügt.
- Der IE bekommt ein extra CSS mit Conditional Comments.
Anmerkung: Das hat weniger mit dem PHP-Menü als mit Layout-Fragen zu tun. Möglicherweise muß man zukünfig den IE7 wieder ausnehmen vom extra CSS.
Die Bedingung für CC müßte dann lauten:<!--[if lte IE6 ]> <link rel="stylesheet" type="text/css" href="ie.css" > <![endif]-->
- Wenn ich dann noch mal ein Stylesheet für den Druck schreibe, ist es nur hier die eine einzige Stelle, an der ich die entsprechende Zeile für alle Seiten einzufügen brauche.
- Das Haupt-DIV fängt auch gleich hier an; wenn mir mal was anderes fürs Layout einfällt, brauche ich keine einzige der Inhaltsseiten anzufassen.
menu.php
<?php if (!isset($hmenu)) $hmenu=""; function href ($seite, $menu, $hmenu) { if ($menu != $seite) echo "href='$seite.php'"; if ($hmenu== $seite) echo ' class="akt"'; } ?> <div id="nav"> <h3>Index</h3> <ul> <li><a <?php if ($menu != "start") {echo 'href="/reisen/schottland2006/"';} else {echo "class='akt'";} ?>>Schottland</a></li> <li><a <?php href("anreise",$menu,$hmenu) ?>>Anreise</a></li> <li><a <?php href("lochlomond",$menu,$hmenu) ?>>Loch Lomond</a></li> <li><a <?php href("balloch",$menu,$hmenu) ?>>Balloch Park</a></li> <li><a <?php href("mambeg",$menu,$hmenu) ?>>Mambeg</a></li> <li><a <?php href("benmore",$menu,$hmenu) ?>>Benmore</a></li> <li><a <?php href("tour1",$menu,$hmenu) ?>>Tour 1</a></li> <li><a <?php href("glennevis",$menu,$hmenu) ?>>Glen Nevis</a></li> <li><a <?php href("skye",$menu,$hmenu) ?>>Skye</a></li> <li><a <?php href("glenfinnan",$menu,$hmenu) ?>>Glenfinnan</a></li> <li><a <?php href("mallaig",$menu,$hmenu) ?>>Mallaig / Arsaig</a></li> <li><a <?php href("fortwilliam",$menu,$hmenu) ?>>Fort William</a></li> <li><a <?php href("bennevis",$menu,$hmenu) ?>>Ben Nevis</a></li> <li><a <?php href("glenfinnanstation",$menu,$hmenu) ?>>Glenfinnan Station</a></li> <li><a <?php href("highlandgames",$menu,$hmenu) ?>>Highland Games</a></li> </ul> <p>Fortsetzung ist in Arbeit...</p> <div class="border"></div> <p><a href="/reisen/">Mehr Reisen</a></p> <p><a href="/"><img src="/homelogo2.gif" width="40" height="29" alt="4haus Startseite"></a></p> <p><a href="/impressum.html">Impressum</a></p> </div>
Erläuterungen
- Die nicht immer gesetzte Variable
$hmenu
wird initialisiert. - Die function
href
gibt das href-Attribut aus, wenn die übergebene Variable$seite
nicht mit dem jeweligen Menüpunkt übereinstimmt.
BTW: Der Funktionsname ist frei gewählt. er muß wirklich nicht so lauten, wie das HTML-Attribut. - Die hervorgehobene Formatierung von Links ohne href-Attribut ist über CSS realisiert.
- Falls ein Link außer der Reihe hervorgehoben werden soll - bei den Unterseiten - wird noch ein class-Attribut ausgegeben. Dafür dient die Variable
$hmenu
. - Und wenn es mehr Seiten werden, dann werden an dieser einzigen Stelle Menüpunkte hinzugefügt.
footer.php
<br class="cb"> </div> <!-- main --> </body> </html>
Erläuterungen
Das break mit dem clear ist layoutbedingt und könnte hier gegebenenfalls entfernt werden, ebenso wie das Schließen des in head.php
geöffneten DIVs.