|
|||
Eingebundene Navigation über PHP in verschachtelte Navi ändern
Hallo zusammen,
ich nutze für die Navigation immer eine PHP Abfrage. So, dass ich nicht auf jeder einzelnen HTML Seite die Navigation einfügen muss. Hierfür füge ich lediglich in meine Mainfile folgendes ein: HTML-Code:
<div id="navigation"><?php include('content/_navigation.php'); ?></div> PHP-Code:
PHP-Code:
Ich möchte nun aber eine Navigation nutzen, die bei einem Mousehover nach unten hin "ausfährt". Sprich eine Subnavigation. So dass ein Listenpunkt noch mehrere Unterpunkte hat. Sieht im HTML so aus: HTML-Code:
<ul id="topnav"> <li><a href="">Home</a></li> <li> <a href="">About</a> <span> <a href="">The Company</a> | <a href="">The Team</a> | <a href="">Careers</a> </span> </li> <li> <a href="">Services</a> <span> <a href="">What We Do</a> | <a href="">Our Process</a> | <a href="">Testimonials</a> </span> </li> <li> <a href="">Portfolio</a> <span> <a href="">Web Design</a> | <a href="">Development</a> | <a href="">Identity</a> | <a href="">SEO & Internet Marketing</a> | <a href="">Print Design</a> </span> </li> <li><a href="">Contact</a></li> </ul> Ich weiss einfach nicht, wie ich die 2 PHP Datein umschreiben muss, dass es funktioniert. Wenn mir diesbezüglich jemand weiterhelfen könnte wäre ich unendlich dankbar. Ich bin nämlich mit meinem Latein am Ende. Beste Grüße Cathrin |
Sponsored Links |
|
|||
Du verwendest für die Erstellung deiner Liste eine Iteration. Dafür liest du die Schlüssel und Werte aus einem mehrdimensionalen Array ein.
Dieses Vorgehen macht man eigentlich nur wenn die Daten aus einer Datenbank kommen und dann dynamisch eine Liste daraus kreiert wird. Da du eigentlich die Navigation als Array vorliegen hast und mit include() einbindest, könntest du dir den gesamten Schleifenvorgang sparen, wenn du die Navigation schon als Html direkt über das include() lädst. Also so zum Beispiel: _navigation.php PHP-Code:
Schneller ist es zudem auch noch und du sparst dir Schreiberei, weitere Fehlerquellen und hast auch gleich die Ausgabe des HTML vorliegen. Im übrigen habe ich den HTML-Code der Liste mal verbessert, da man das mit verschachtelten Listen löst. Die Ausgabedarstellung machst du dann wie gehabt mit CSS. Wenn du wissen willst wie man Verschachtelte Listen anhand einer Rekursion dynamisch erstellt lies einfach mal diesen Artikel ⇒ Nested Sets – Verschachtelte Bume mit MySQL - Arne Klempert
__________________
"Wieso ist der Code schrott, ich dachte hier seien Profis..." Aus einem Forum. |
Sponsored Links |
|
|||
Kannst auch mal hier schauen: PHP Forum: phpforum.de - Themen mit dem Stichwort rekursion
Dort sind einige Ansätze genannt, wie du Datenstrukturen in Bäume und schließlich HTML-Listen überführen kannst. |
|
|||
Soooo, erstmal vielen lieben Dank für das ganze Feedback.
Ich habe jetzt folgendes mal probiert: Habe den array weggelassen und die navi direkt über php komplett eingebunden. PHP-Code:
Das funktioniert auch. Problem ist jetzt nur, dass ich nicht weiss wie ich es machen soll, dass bei den Hauptmenüpunkten ein "active" oder "on" gesetzt wird. Also wenn ich z. B. Home oder Unternehmen angeklickt habe, dass der Hover Effeckt dann bestehen bleibt. Also um zu wissen auf welcher Seite man sich grad befindet. Das war vorher ja hierrüber geregelt: PHP-Code:
Wie könnte ich das jetzt regeln? Schonmal vielen Dank im vorraus. lg Cathrin Geändert von Bubble (23.05.2013 um 11:38 Uhr) |
|
|||
PHP-Code:
ins Menu fügst du dann ein: HTML-Code:
<li <?php=$active1?>> <a href="" >Home</a></li> Du hast die Liste nicht verschachtelt gelassen. Warum nicht?
__________________
"Wieso ist der Code schrott, ich dachte hier seien Profis..." Aus einem Forum. Geändert von explanator (23.05.2013 um 17:30 Uhr) |
|
|||
Habe mal wieder ein wenig an einem Menü-Generator gebastelt:
- https://gist.github.com/mermshaus/5643279 Setup: Alle Dateien in ein Verzeichnis innerhalb des Docroots kopieren (oder natürlich direkt per Git klonen), dann das Verzeichnis im Browser anwählen. Dann einfach rumklicken. Eventuell muss noch die RewriteBase gesetzt werden, aber in der Regel sollte das auch so klappen. Die Klasse nimmt derlei Eingaben entgegen… Code:
# Whitespace vor/nach dem Trenner ist egal. # Habe das nur aus Übersichtsgründen angeglichen. # Dass mit vier Spaces eingerückt wird, ist aber wichtig. Item 1 ; /a Item 1.1 ; /a/a Item 2 ; /b Item 2.1 ; /b/a Item 2.2 ; /b/b Item 2.3 ; /b/c Item 2.3.1 ; /whatever Item 3 ; /c HTML-Code:
<ul> <li><a href="/fiddle/mb/a">Item 1</a> <ul> <li><a href="/fiddle/mb/a/a">Item 1.1</a></li> </ul> </li> <li class="onpath"><a href="/fiddle/mb/b">Item 2</a> <ul> <li><a href="/fiddle/mb/b/a">Item 2.1</a></li> <li><a href="/fiddle/mb/b/b">Item 2.2</a></li> <li class="onpath"><a href="/fiddle/mb/b/c">Item 2.3</a> <ul> <li class="onpath selected"><a href="/fiddle/mb/whatever">Item 2.3.1</a></li> </ul> </li> </ul> </li> <li><a href="/fiddle/mb/c">Item 3</a></li> </ul> Zudem werden die CSS-Klassen „onpath“ und „selected“ hinzugefügt (ebenfalls konfigurierbar). „selected“ bezeichnet das gerade aktive Menü-Element, „onpath“ bezeichnet alle Elternelemente dieses Menü-Elements. Das wird automatisch anhand der aktuellen URL berechnet. Die lautet hier aktuell etwa: http://localhost/fiddle/mb/whatever Da wird erst mal der uninteressante Pfadanteil bis zum Projektverzeichnis („http://localhost/fiddle/mb“) weggeschnitten. Dann wird das Menü-Element gesucht, das zur Pfadangabe „/whatever“ passt. Wenn das gefunden ist, hangelt sich der Code den Menü-Baum nach oben und kann so auch die Menü-Elemente identifizieren, die auf dem Pfad liegen. Anders gesagt: Der Mechanismus basiert nicht darauf, dass „/foo“ auf dem Pfad zu „/foo/bar“ liegt, sondern analyisiert ausschließlich die definierte Hierarchie, also die linke Seite hier: Code:
Item 2 ; /b .... Item 2.3 ; /b/c Item 2.3.1 ; /whatever Das beigefügte CSS ist natürlich nur ein Beispiel. Die Ausgabe muss nicht als Dropdown gestylet werden. Der Code selbst ist ziemlich scheußlich (habe das hauptsächlich geschrieben, um mal wieder mit Baumstrukturen zu experimentieren und geschickte Vorgehensweisen zu suchen und praktische Notwendigkeiten zu entdecken). Wie immer wird es derartige Komponenten schon in besser geben (im Zweifel bei Zend oder Symfony gucken). Geändert von mermshaus (24.05.2013 um 19:01 Uhr) |
|
|||
Vielen Dank für das Feedback.
Hatte jetzt erst die Gelegenheit mir alles anzusehen. Ich werde das von dir direkt mal testen mermshaus. Genail. Vielen Dank! @explanator: Ahhh so macht man das. Argh. Gewusst wie. Ich hatte es jetzt vorrübergehend so gelösts: ^^ PHP-Code:
EDIT: Ach so, ich hatte das jetzt mit span erstmal so gelassen, weil ich sonst wieder die ganze css abändern hätte müssen und ich kaum Zeit hatte. Eleganter ist natürlich die verschachtelte Liste. |
Themen-Optionen | |
Ansicht | |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Navigation funkt nicht im IE | Muamicus | CSS | 8 | 23.06.2011 10:25 |
komplette Seite verzogen | Massacre | CSS | 2 | 20.10.2009 10:16 |
Boxen von Navigation und Logo sind zu weit auseinander | lila_3 | CSS | 2 | 03.09.2009 23:28 |
Bevohrzugte PHP Navigation | Vybsi | Serveradministration und serverseitige Scripte | 10 | 05.04.2008 22:58 |
Dateien auslagern - Include und PHP | ArcVieh | Serveradministration und serverseitige Scripte | 17 | 27.03.2008 18:09 |