PHP

Dynamische Navigation mit PHP

Eine Seite für alle, alle Seiten für eine

Jedes Web besitzt ein Menü, um den Benutzer durch die Seiten zu navigieren. Bei kleineren bis mittelgroßen Webs genügen dabei meist zwei Navigationsebenen, um alle Punkte unterzubringen. Jeder Webmaster hat dabei das Problem, das Menü möglichst dynamisch zu halten, um nicht bei einer späteren Änderung, wenn z.B. ein neuer Navigationspunkt hinzukommt, die Änderung auf allen Seiten manuell nachziehen zu müssen. Ein Lösungsansatz bietet hierbei PHP. In diesem Artikel möchte ich Ihnen eine Navigation mit 5 Haupt- und jeweils 5 Unterseiten vorstellen, die sehr einfach zu implementieren und zu pflegen ist.

Ausgangspunkt der Überlegung ist die Entwicklung eine PHP-Rahmenseite, die ein horizontales Menü enthält, das sich über die ganze Seite erstreckt, und in die die anzuzeigende HTML-Seite beim Aufruf eingebunden wird. Dies hat den Vorteil, dass das Menü an zentraler Stelle nur einmal gepflegt werden muss. Die einzelnen Teile der Seite stecken in jeweils einer Zeile einer Haupttabelle. In unserem Beispiel haben wir drei Teile: eine Kopfzeile, in der die Überschrift untergebracht ist, eine Menüzeile, in der das Menü steckt und einer Inhaltszeile, in die eigentliche HTML-Seite per PHP-Include-Befehl eingefügt wird.

<!-- Kopfzeile -->
<tr><td height="40" align="left" valign="top">
   <h1>PHPMenu</h1>
</td></tr>

<!-- Navigation -->
<tr><td height="60" align="left" valign="top">
   ...
</td></tr>

<!-- Inhalt -->
<tr><td align="left" valign="top">
   ...
</td></tr>

Die Kopfzeile

In der Kopfzeile kann man entweder wiederum eine Tabelle unterbringen, in der ein Logo und andere zentrale Inhalte untergebracht sind. In unserem Beispiel beschränken wir uns auf eine simple Überschrift.

Das Menü

Das Navigationsmenü besteht wiederum aus einer Tabelle mit zwei Zeilen/Zellen. In der ersten Zeile sollen alle Hauptmenüpunkte enthalten sein und in der zweiten die zum ausgewählten Hauptpunkt dazugehörigen Unterpunkte, die jeweils eine anzuzeigende Web-Seite repräsentieren. In beiden Zellen sind die A-Tags (Links) einfach aneinander gereiht:

<table...>
   <tr>
      <td id=nav class=darkgreyback height=24px>
         <a href=...>Hauptpunkt 1</a>
         <a href=...>Hauptpunkt 2</a>
         ...
      </td>
   </tr>
   <tr>
      <td id=subnav class=lightgreyback height=20px>
         <a href=...>Unterpunkt 1</a>
         <a href=...>Unterpunkt 2</a>
         ...
      </td>
   </tr>
</table>

Die Formatierung der Zellen und der Links bewerkstelligt eine eingebundene Cascading-Style-Sheet-Datei, inklusive eines Hover-Effektes, sobald die Maus einen der Menüpunkte berührt. Wichtigester Teil ist jedoch die Unterscheidung zwischen einem selektierten Menüpunkt und allen anderen. Der Link der Seite, der aktuell angezeigt wird, wird mit der Classe sel versehen, der eine andere Hintergrundfarbe besitzt. Dies gilt sowohl für den Haupt- als auch für den Unterpunkt (#nav bzw. #subnav).

td.darkgreyback { padding:0px; background-color: #B2B2B2; }
td.lightgreyback { padding:0px; background-color: #CCCCCC; }

#nav a {
   height: 24px; padding: 4px; margin: 0px;
   color:#FFFFFF; text-decoration:none;
}

#nav a:hover {
   background-color:#727AC5;
   color:#FFFFFF; text-decoration:none
}

#nav a.sel, a:hover.sel { background-color:#727AC5; }

#subnav a {
   height: 20px; padding: 2px; margin: 0px;
   color:#FFFFFF; text-decoration:none;
}

#subnav a:hover {
   background-color:#9DA3D7;
   color:#FFFFFF; text-decoration:none
}

#subnav a.sel, a:hover.sel { background-color:#9DA3D7; }

Der Inhalt

In der Inhaltzelle ist, wie beim Menü eine Untertabelle enthalten, die jedoch nur eine einzige Zelle beinhaltet, in die der Inhalt der anzuzeigenden HTML-Datei per Include-Anweisung eingesteuert wird. Wenn man möchte, kann man zudem den unteren Rand der Seite durch eine weitere leere Zelle abgrenzen.

<table border="0" cellspacing="0" cellpadding="0" width="100%">   
<tr>
      <td>
         <?php include("$page"); ?>
      </td>
   </tr>
   <tr><td height=30><br></td></tr>
</table>

Die in unserem Beispiel verwendete $page-Variable wird über einen der PHP-Seite übergebenen Parameter bestückt. Dieser Parameter enthält mindestens zwei durch einen Schrägstrich separierte Worte, die den Pfad zu einem Unterpunkt repräsentieren, also z.B. 'haupt3/unter2', um zum 2. Unterpunkt des 3. Hauptpunkt zu gelangen. Um nun möglichst wenig Pflegeaufwand zu haben entspricht die Site-Struktur, d.h. die im Web enthaltenen Ordner genau diesem Konzept (siehe Abb.).

Mit Hilfe eines solchen Parameters lässt sich nun mittels PHP recht einfach der Pfad zur anzuzeigenden HTML-Seite ermitteln. Der notwendigen Code wird im Kopf (Head) der PHP-Seite abgelegt:

<?php

   // Parameter aus der URL auslesen
   // Wenn er leer sein sollte, wird eine Standardseite angezeigt
   if (empty($_GET['page'])) {
      $page = "haupt1/unter1";
   } else {
      $page = $_GET['page'];
   }

   // Überprüfen, ob die Seite existiert
   // Wenn nicht, wird eine Fehlerseite angezeigt
   if (file_exists($page.".htm")==false) $page = "haupt1/error";

   // Für die Menüführung:
   // Variable am Schrägstrich zerlegen und in einem Array ablegen
   $array = explode("/",$page);

   // Für die Menüführung: Haupt- und Unterpunkt festlegen
   $parent = $array[0];
   $child = $array[1];

   // Seitenname generieren
   $page = $page.".htm";

?>

Mit diesem Konzept lassen sich auch weitere Ebenen abbilden. Lautet zum Beispiel der Parameter 'haupt2/unter4/ordner10/seite12', so wird durchaus die richtige Seite angezeigt, lediglich das hier vorgestellte Zwei-Ebenen-Menü bleibt auf Hauptpunkt 2 und Unterpunkt 4 stehen.

WICHTIG:  Die HTML-Seiten selbst, sollten aufgrund der Tatsache, dass sie in eine andere Seite eingefügt werden, keine HTML-, HEAD- oder BODY-Tags enhalten, da es sonst zu unerwünschten Nebeneffekten kommen kann, je nachdem wie ein Browser das Vorhandensein z.B. zweier BODY's interpretiert.

Die Anzeige des Menüs

Wie bereits im oben abgebildeten PHP-Code ersichtlich wird, benutzen wir den Parameter auch für die korrekte Anzeige der Navigation. Wir müssen im Prinzip nur noch unterscheiden, ob der übergebene Haupt- und Unterpunkt selektiert sein soll oder nicht (CSS-Klasse sel oder nicht). Dies erledigen wir anhand der beiden Variablen $parent und $child mit einer PHP-Fallunterscheidung beim Aufbau des Menüs im HTML-Code, wobei zunächst in einem switch-Statement anhand des Hauptpunktes verzweigt wird und anschließend mit einem if-Statement entschieden wird, ob an einen Link die sel-Klasse angelegt werden soll.

<?php
   switch ($parent) {

      case "haupt1":
?>
   <!-- Untermenü 1 -->
   <a <?php if($child=="unter1") echo "class=sel"; ?>
      href="/index.php?page=haupt1/unter1">&nbsp;Unterpunkt 1.1&nbsp;</a>
   <a <?php if($child=="unter2") echo "class=sel"; ?>
      href="/index.php?page=haupt1/unter2">&nbsp;Unterpunkt 1.2&nbsp;</a>
   <a <?php if($child=="unter3") echo "class=sel"; ?>
      href="/index.php?page=haupt1/unter3">&nbsp;Unterpunkt 1.3&nbsp;</a>
   <a <?php if($child=="unter4") echo "class=sel"; ?>
      href="/index.php?page=haupt1/unter4">&nbsp;Unterpunkt 1.4&nbsp;</a>
   <a <?php if($child=="unter5") echo "class=sel"; ?>
      href="/index.php?page=haupt1/unter5">&nbsp;Unterpunkt 1.5&nbsp;</a>
<?php
break;

... (Fälle 2 - 4) ...

   case "haupt5":
?>
   <!-- Untermenü 5 -->
   <a <?php if($child=="unter1") echo "class=sel"; ?>
      href="/index.php?page=haupt5/unter1">&nbsp;Unterpunkt 5.1&nbsp;</a>
   <a <?php if($child=="unter2") echo "class=sel"; ?>
      href="/index.php?page=haupt5/unter2">&nbsp;Unterpunkt 5.2&nbsp;</a>
   <a <?php if($child=="unter3") echo "class=sel"; ?>
      href="/index.php?page=haupt5/unter3">&nbsp;Unterpunkt 5.3&nbsp;</a>
   <a <?php if($child=="unter4") echo "class=sel"; ?>
      href="/index.php?page=haupt5/unter4">&nbsp;Unterpunkt 5.4&nbsp;</a>
   <a <?php if($child=="unter5") echo "class=sel"; ?>
      href="/index.php?page=haupt5/unter5">&nbsp;Unterpunkt 5.5&nbsp;</a>
<?php
   }
?> 

Mit dieser fertigen PHP-Seite sind wir nun in der Lage nach Herzenslust HTML-Seiten zu kreieren, ohne uns um die Nachführung des Menüs zu kümmern.

Downloads

phpmenu.zip
kick it on dotnet-kicks.de AddThis 0 wikio-Stimme(n) Trackback-Url...

Verwandte Artikel

Seiten mit ASP zusammensetzen

176 Kommentare bislang...

  • Your article is usefull for me.It is a good article. We are <a href="http://www.thechanelhandbags.net ">Chanel Handbags</a> online store,we will offer you the cheap <a href="http://www.thechanelhandbags.net ">Chanel Handbags</a> but top quality. Free Shipping! <a href="http://www.thechanelhandbags.net ">Chanel Handbags</a> <a href="http://www.thechanelhandbags.net ">Chanel 2.55</a>
    We are also <a href="http://www.canadagooseparkas.net ">Canada Goose Parka </a> online store,we will offer you the cheap <a href="http://www.canadagooseparkas.net ">Canada Goose Jacket </a>but top quality.
    176
    Chanel Handbags online store,we will offer you the cheap Chanel Handbags but top quality. Free Ship">chanel handbags : Montag, 30. Januar 2012 07:01
  • Your article is usefull for me.It is a good article. We are <a href="http://www.thechanelhandbags.net ">Chanel Handbags</a> online store,we will offer you the cheap <a href="http://www.thechanelhandbags.net ">Chanel Handbags</a> but top quality. Free Shipping! <a href="http://www.thechanelhandbags.net ">Chanel Handbags</a> <a href="http://www.thechanelhandbags.net ">Chanel 2.55</a>
    We are also <a href="http://www.canadagooseparkas.net ">Canada Goose Parka </a> online store,we will offer you the cheap <a href="http://www.canadagooseparkas.net ">Canada Goose Jacket </a>but top quality.
    175
    Chanel Handbags online store,we will offer you the cheap Chanel Handbags but top quality. Free Ship">chanel handbags : Montag, 30. Januar 2012 06:59
  • Your article is usefull for me.It is a good article. We are <a href="http://www.thechanelhandbags.net ">Chanel Handbags</a> online store,we will offer you the cheap <a href="http://www.thechanelhandbags.net ">Chanel Handbags</a> but top quality. Free Shipping! <a href="http://www.thechanelhandbags.net ">Chanel Handbags</a> <a href="http://www.thechanelhandbags.net ">Chanel 2.55</a>
    We are also <a href="http://www.canadagooseparkas.net ">Canada Goose Parka </a> online store,we will offer you the cheap <a href="http://www.canadagooseparkas.net ">Canada Goose Jacket </a>but top quality.
    174
    Chanel Handbags online store,we will offer you the cheap Chanel Handbags but top quality. Free Ship">chanel handbags : Montag, 30. Januar 2012 06:57
  • wedding ceremony gown so that you Kudao complete Brief bridesmaid gown just isn't patented inside the previous red bottoms shoes a lot of people prefer to put on a lengthy marriage ceremony gown brief gown don't appear critical <img src="http://www.varyshoes.net/images/uploads/pumps/clm519025.jpg" ] hasn't been optimistic but a bridesmaid within the patent In current many years this idea is about to alter sandals shoes brief wedding ceremony gown also has turn into well-known grow to be these days vital bride marriage ceremony outfit black leather simple pumps alta nodo platform d'orsay Brief perform limitless customized wedding ceremony gown provides the impression might be fairly brief warm generous function without having dropping the grand see a visitor will locate it a good time Right after studying this postmen and women also examine Lace wind swept once more Japanese Ka Wayi bride design (Pictures)Jun twenty five2010 Korean media "find their chatter" Eva aesthetic wedding ceremony open up
    173
    toe pumps : Montag, 16. Januar 2012 03:00
  • omega snoopy La Dona de cartier up all your deductions and subtract them from ten pristine mint When you have a score from ten to five you have got an excellent antique pocket view and it is really worth the price of fix to revive it if necessary rolex Submariner watch Grades four to three you've a good view however it may well only be beneficial being a show piece and may well not be really worth correcting Grades two to one are essentially scrap or might be harvested for components Guidelines & Warnings Always be careful when opening a pocket view so that you do not scratch the situation Timex duplicate is often a model of informal watches and it's recognized for that good quality and affordability of its watches Started in 1854 it is 1 of one of the most acknowledged and set up view manufacturers Timex produces watches reproduction for guys females and kids fake rolex watches The watches reproduction are mainly fake Corum watches fake watches for sale
    172
    omega moonwatch : Montag, 16. Januar 2012 02:56

Dein Kommentar hierzu...


Kommentar-Feed für diesen Beitrag
Gravatare werden unterstützt .:. eMail-Adressen werden nicht veröffentlicht
 

RSS-Feed

Die URL des Standard-Newsfeed von zerbit.de lautet:

http://www.zerbit.de/rssfeed.aspx

Login


 

 

Statistik



kürzlich kommentiert

Artikel 24

  • Datum: 12.04.2005
    Kategorie: PHP
    Zugriffe: 19.164
    Kommentare: 176
    Trackbacks: 0

Letzte Beiträge

Kategorien

Buttons & More

Blog-Roll

Banner Piraten-Partei