Zurück zur Homepage

KS Webdesign - Der Blog

Navi includen – ohne Deppenlink

23. Dezember 2009 von Klaus

Wer kennt das nicht: Die Navigation einer bestehenden Site ändert sich und nun muss die Änderung bei wirklich jeder Seite eingetragen werden. Nervig und zeitaufwändig!

Eine Menge Zeit spart man sich wenn man die navi per include einbindet. Diese Methode ist relativ simpel und effektiv. Man führt die Änderung an einer Datei durch und fertig.

Man hat zwar noch den Deppenlink (Link der auf sich selber zeigt), aber was soll’s.

In diesem, auch für PHP-Vollpfosten geeigneten Tutorial beschreibe ich euch, wie ihr die navi includet und trotzdem den Deppenlink vermeidet.

So sieht euer Menü normalerweise aus:

  • <div id="navi">
  • <ul>
  • <li><strong>Startseite</strong></li>
  • <li><a href="leistungen.htm">Leistungen</a></li>
  • <li><a href="team.htm">Team</a></li>
  • </ul>
  • </div>

Wie es sich gehört ist das Menü eine ungeordnete Liste. Bei der aktuellen Seite wurde a gegen strong ausgetauscht, um den Deppenlink zu vermeiden.

Um die navi zu includen, benenne ich die beteiligten Dateien von .htm in .php um. Aus der index.htm wird also index.php, usw.

Wo die ungeordnete Liste mit dem Menü stand trage ich folgendes ein:

  • <div id="navi">
  • <?php include ("navi.php") ?>
  • </div>

Den Inhalt der navi.php, die anstelle von dem, was da vorher stand eingebunden wird werfe ich euch mal direkt vor die Füße:

  • <?php
  • $uri = $_SERVER['REQUEST_URI'];
  • $navi = array(
  • '/' => 'Startseite',
  • '/leistungen' => 'Leistungen',
  • '/team' => 'Team',
  • );
  • echo '<ul>'."\n";
  • foreach ($navi as $href => $text)
  • {
  • echo '<li>';
  • if ($uri == $href)
  • {
  • echo '<strong>'.$text.'</strong>';
  • }
  • else
  • {
  • echo '<a href="'.$href.'">'.$text.'</a>';
  • }
  • echo '</li>'."\n";
  • }
  • echo '</ul>'."\n\n";
  • ?>

Um zu verstehen was wo eingetragen wird, lohnt es sich einmal etwas genauer hinzuschauen.

Zuerst wird in einem array die Adresse root-relativ eingetragen, d.h. es wird vom Wurzelverzeichnis des Webservers ausgegangen, was ja i.d.R. immer / ist.

Rechts daneben steht in Hochkommata der Text des Menüpunktes.

Wenn die angewählte URL gleich der URL des Menüpunktes ist wird a gegen strong ausgetauscht, ansonsten über die else der Link hingeechot.

Das array kann beliebig erweitert werden, je nachdem wieviel Menüpunkte die Navigation hat.

Wenn ihr mehrere Menüs auf eurer Seite habt, braucht ihr z.B. eine topnavi.php, eine seitennavi.php und/oder eine fuss-navi.php. Der Inhalt ist bis auf die Punkte des arrays gleich, ihr müßt nur die richtige PHP-Datei an der richtigen Stelle includen.

Das ist die einfachste Art eines Menüs, welches includet wird. Da ich euch noch mehrere Varianten zur Verfügung stellen will, habe ich alles zum Download in den Ordner include.zip gepackt.

Die enthaltene navi-normal.php ist die hier vorgestellte Variante.

Bei der navi-title.php gibt es zusätzlich den title-Tag für a

Bei der navi-klasse.php hat a noch eine zusätzliche Klasse und die navi-id.php hält für jeden Listenpunkt eine id bereit.

Funktioniert problemlos mit statischen Seiten. Ob das mit einem CMS so ohne weiteres geht glaube ich eher nicht.

Wenn ihr das Gleiche für eine Wordpressinstallation wollt, kann ich euch den schönen Artikel von Thomas dazu ans Herz legen.

Von Markus stammt die Ursprungsversion des Scriptes. Heiko hat es verfeinert und David hat mir beim Verstehen des Scriptes geholfen.

Vielen Dank dafür euch dreien!

Ihr habt mir abgesehen von diesem Script schön öfter geholfen. Auch dafür nochmal an dieser Stelle meinen besonderen Dank! Ich habe viel von euch gelernt.

7 Kommentare und 3 Trackbacks/Pingbacks

  1. von Stefan Klose (Webdesign Ruhrgebiet) – Dienstag, 05. Januar 2010 um 09:30

    Naja, mit einem Content Management System wäre eine solche Aktion gar nicht notwendig. Ansonsten lässt sich das auf (einfachsten) Servern ohne CGI-Unterstützung noch mit Server Side Includes lösen:

    http://httpd.apache.org/docs/2.0/howto/ssi.html

    bzw.

  2. von Hubspe – Donnerstag, 07. Januar 2010 um 11:52

    Hi,

    sorry wenn ich erst jetzt antworte, aber ich bin grad im Skiurlaub.

    Naja, mit einem Content Management System wäre eine solche Aktion gar nicht notwendig.

    Ich habe mich bei dem Artikel ja vor allem auf statische Seiten bezogen. ;)

    Für den normaler mittelständischer Unternehmer oder Freiberufler, der keine eigene EDV-Abteilung und auch keinen Shop am Laufen hat rechnet sich ein CMS einfach nicht.
    Da ist er mit einer Statischen Site, die ich pflege und auch Änderungen einarbeite wesentlich preisgünstiger dran.

    Gruß
    Klaus

  3. von Bernhard H. – Dienstag, 12. Januar 2010 um 17:33

    Naja, du kannst dem Kunden ja ein kostenloses opensource-CMS aufspielen. Oder irgendetwas ganz einfaches. Dann muss du nicht immer ran, und der Kunde kann einpflegen, soviel er will.

  4. von Hubspe – Mittwoch, 13. Januar 2010 um 11:59

    Naja, du kannst dem Kunden ja ein kostenloses opensource-CMS aufspielen. Oder irgendetwas ganz einfaches. Dann muss du nicht immer ran, und der Kunde kann einpflegen, soviel er will.

    meine Kunden sind Freiberufler und kleinere Mittelständler.

    Denen käme es deutlich teurer, wenn ich ein individuelles Layout auf ein CMS wie Wordpress z.B. aufsetzen würde.
    Zusätzlich müßte der Kunde ja auch die Schulung bezahlen.

    Von diversen Katastrophen, weil er sich das Layout zerschießt oder er bei größeren Versionssprüngen versucht automatisch upzudaten will ich gar nicht erst anfangen.

    Für diesen Kundenkreis bin ich mit statischen Seiten und Pflege derselben durch mich deutlich schneller und kostengünstiger.

    Gruß
    Klaus

  5. von johanna – Samstag, 27. Februar 2010 um 13:38

    also mir hat dieser Tipp sehr geholfen, da ich bisher immer nur mit Tricks gearbeitet hab. Ich habe z.B. einen Ordner nav erstellt und dann jedemal einfach eine andere Datei z.B. nav-start.php includet. Bei Änderungen mußte ich dann nur an dieser Stelle rein – das geht dann auch schneller, aber so ist es besser. Danke

  6. von Nicolas Odrich – Mittwoch, 28. April 2010 um 19:59

    soweit ich (bin freizeit php coder) weis, besteht die Uri nicht nur aus der Url, sondern auch aus eventuellen parametern

    www(dot)meinedomain(dot)com/meineseite.php?parameter=wert

    bei Verwendung von $_SERVER['REQUEST_URI'] würde der Teil ab dem ? mitverwertet werden …
    somit bei der abfrage ‘meineseite.php’ == ‘meineseite.php?parameter=wert’ ?

    Ich würde entweder mit $_SERVER['REQUEST_URL'] arbeiten oder $PHP_SELF zurückgreifen dann würde die startseite nicht mit ‘/’ sondern ‘/meineseite.php’ im array stehen

  7. von Klaus – Donnerstag, 29. April 2010 um 06:40

    Moin Nicolas,

    deshalb würde ich sowas auch nur bei ansonsten statischen Seiten verwenden.
    In Verbindung mit einem CMS würde ich die Finger davon lassen.
    Das hätte ich vielleicht in meinem Artikel noch deutlicher rausstellen sollen. :)

  8. Pingback Einkaufen-in-Tuttlingen – Donnerstag, 24. Dezember 2009 um 00:35

    [...] Navi includen – ohne Deppenlink [...]

  9. Pingback if-Frage... - XHTMLforum – Montag, 28. Dezember 2009 um 21:53

    [...] [...]

  10. Pingback Hilfe: navigation included - wie kann man den aktiven men – Samstag, 30. Januar 2010 um 16:53

    [...] sich selbst zeigende Links gleich ganz entfernt (und nicht nur markiert) kannst du hier nachlesen: Navi includen – ohne Deppenlink Das Prinzip: Die Navigation wird per PHP include() auf jeder Seite eingebunden. Die Seitenstruktur [...]

Sprich und fürchte dich nicht:

Die Angaben des Namens und der E-Mail sind leider notwendig, das Feld für die Website optional.

Bitte maskiert < mit &lt; und > mit &gt; sonst verschwinden sie im Nirgendwo!

« »