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.
« Fixierte Positionierung – Google Maps per iframe in Homepage einbinden »
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.
Hi,
sorry wenn ich erst jetzt antworte, aber ich bin grad im Skiurlaub.
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
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
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
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
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.
[...] Navi includen – ohne Deppenlink [...]
[...] [...]
[...] 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 [...]