Akkordeon-Menü mit Wayfinder in MODx

von Thomas Jakobi am Montag, 30. Juli 2007 um 22:23 Uhr. Kommentare (18)

Ein Akkordeon-Menü ist eine platzsparende Möglichkeit ein Menü effektvoll auf eine Internet-Seite zu bringen. Der Effekt funktioniert zwar nur mit dem Einsatz von Javascript, das Menü ist aber auch ohne Javascript les- und benutzbar. Ich habe es auf der Webseite des Kinderheim Pauline von Mallinckrodt eingesetzt.

Da die Javascript Effekte in MODx von script.aculo.us auf mootools umgestellt werden, ist der Eintrag im Wiki zum Erzeugen eines Akkordeon-Menüs mit dem Wayfinder veraltet. Leider sind die beiden Effektbibliotheken nicht miteinander kompatibel und deshalb sollte auf einer MODx-Seite nur eine Bibliothek (in diesem Fall mootools) eingesetzt werden.

Voraussetzungen

Für das Akkordeon-Menü muss die Menüstruktur in zwei Ebenen aufgeteilt werden. Die Struktur kann z.B. folgendermaßen aussehen (der Effekt lässt sich auf der rechten Seite ausprobieren):

  • Ordner 1
    • Dokument 1a
    • Dokument 1b
    • Dokument 1c
  • Ordner 2
    • Dokument 2a
  • Ordner 3
    • Dokument 3a
    • Dokument 3a
  • Ordner 1
    • Dokument 1a
    • Dokument 1b
    • Dokument 1c
  • Ordner 2
    • Dokument 2a
  • Ordner 3
    • Dokument 3a
    • Dokument 3a


Das Menü wäre auch noch weiter verschachtelbar – dies ist allerdings mit dem Akkordeon-Effekt meiner Meinung nach nicht sinnvoll.

Achtung: Durch einen Klick auf die Ordner-Ebene kann kein neuer Seiteninhalt dargestellt werden – denn dabei würde die Seite neu geladen und der Akkordeon-Effekt könnte nicht dargestellt werden.

Folgende Plugins/Snippets müssen installiert werden und funktionieren:

PHx (ohne das Plugin wäre das Ausklappen des aktiven Menüpunktes nicht realisierbar), Wayfinder und die mootools-Bibliothek mit aktiviertem Accordion-Plugin (Version 1.1.1 - diese wird mit MODx 0.9.6.3 ausgeliefert). Zu der Version 1.2 der MooTools muss im More Builder ein Script mit aktiviertem 'Accordion'-Interface geladen werden.

Chunks

Folgende Chunks werden benötigt:

accordionOuter
<div id="accordion"><ul>[+wf.wrapper+]</ul></div>
accordionInner
<ul class="element">[+wf.wrapper+]</ul>
accordionParentRow
<li class="toggler [+wf.classnames+]">[+wf.linktext+]
[+wf.wrapper+]</li>
accordionRow
<li><a href="[+wf.link+]" title="[+wf.title+]" [+wf.attributes+] [+wf.classes+]>[+wf.linktext+]</a>[+wf.wrapper+]</li>

Leider werden Platzhalter im Javascript-Chunk von Wayfinder nicht ersetzt, deshalb muss folgender Javascript-Code im <head>-Abschnitt des Seiten-Template eingebaut werden.

accordionJS
<script src="manager/media/script/mootools/mootools.js" type="text/javascript"></script>
<script type="text/javascript">
window.addEvent('domready', function() {
var accordion = new Accordion('li.toggler', 'ul.element', {
opacity: false,
onActive: function(toggler, element) {
toggler.setStyle('css-style', 'value');
},
onBackground: function(toggler, element) {
toggler.setStyle('css-style', 'value');
},
show: [*id:parent=`menuindex`:math=`?-1`*]
}, $('accordion'));
}); 
</script>

* Mit den Zeilen 'toggler.setStyle('css-style', 'value');' kann man zusätzlich zum Akkordeon-Effekt noch Änderungen am Element-Stil angeben, z.B. eine Änderung der Farbe. Diese Zeilen müssen noch entsprechend angepasst werden. Falls diese Stil-Änderung nicht benötigt wird, sollten diese Zeilen gelöscht werden.

Falls beim Darstellen des Menüs der falsche Ordner aufgeklappt wird, muss eventuell der Menüindex der Dokumente neu durchnummeriert werden – einfach das entsprechende Menü mit dem Doc Manager neu sortieren.

Eventuell muss zusätzlich auch noch die Zeile 'show: …' angepasst werden. In dieser Zeile wird dem Akkordeon der Menüindex des Eltern-Dokumentes übergeben und der zum Dokument passende Ordner ausgeklappt.

Achtung: In der Zeile 'show: …' muss zwingend eine Zahl im HTML-Quellcode ausgegeben werden, sonst funktioniert das Javascript nicht. Dies kann z.B. an einer fehlerhaften Installation von PHx liegen.

Das Snippet wird anschließend folgendermaßen aufgerufen

accordionCall
[!Wayfinder? &startId=`0` &level=`2` &outerTpl=`accordionOuter` &innerTpl=`accordionInner` &parentRowTpl=`accordionParentRow` &rowTpl=`accordionRow`!]

Achtung: Bei einer tieferen Verschachtelung des Menüs von mehr als zwei Ebenen müsste das Javascript z.B. mit UltimateParent modifiziert werden.

Nun muss das Akkordeon-Menü nur noch ein bisschen mit einem CSS aufgehübscht werden. Sinnvolle Klassen dafür wären z.B.:

accordionCSS
#accordion { }
#accordion .toggler { cursor: pointer }
#accordion .toggler:hover { }
#accordion .toggler.active { }
#accordion .element li { }
#accordion .element li.active { }
#accordion a:link, #accordion a:visited { } 

Viel Erfolg!

 


Speichern auf digg Speichern auf slashdot Speichern auf del.icio.us Speichern auf technorati Speichern auf furl Speichern auf Google Speichern auf Mister Wong
Kommentare 1 bis 10 von 18 | Nächste | Letzte
Filip
aktive Parent Items stylen
am 1. März. 2010, 23:37:46 Uhr
Hi Jako!

Ich bekomme es einfach nicht hin, ein aktives Parent-Item per CSS anzusteuern. Ich habe es bereits über activeParentRowTpl und parentRowHereTpl probiert aber es funktioniert nicht!

Was mache ich falsch?

Grüße
Ralf
Effekt nur bei Ordner mit Childdokumenten
am 6. Februar. 2010, 13:38:52 Uhr
Danke.. hat sich erledigt :-)
Ralf
Effekt nur bei Ordner mit Childdokumenten
am 6. Februar. 2010, 10:39:02 Uhr
Hi Jako,
danke für dein Super Menü, der Effekt kommt gut an!

Jetzt habe ich einen Fall, bei dem ich nicht zu jeder Seite einen Überordner habe. Kann man das Script so modifizieren, dass ich die Navigation zb so aufbaue:
>Dokument 1 (linkt auf Inhaltseite),
>Dokument 2 (linkt auf Inhaltseite),
>Ordner 1 (klappt auf),
>> Dokument 1.1
>> Dokument 1.2
>Ordner 2 (klappt auf),
>> Dokument 2.1
>> Dokument 2.2

Man kann ja theoretisch auslesen, ob es sich um einen Ordner handelt oder nicht. Vielleicht kann man das über PHx mit einbauen?

Vielen Dank
FlipFlop
Keine Funktion (Errormeldung im Firefox)
am 4. Januar. 2010, 14:33:37 Uhr
Hi Jako,
bei mir funktioniert das Menü leider nicht. Ich habe MODx 1.0.2, mootools 1.11 (die mitgelieferte Version) und PHx in der Version 2.1.3. Beim Aufruf der Seite wir ein normales ul/li Menü aufgebaut, dabei sind alle Unterseiten aufgeklappt. Der Pfad zu Mootools passt, ich habe auch versucht eine höhere Mootools Version (mit dem More Builder und aktiviertem fx.Accordion) zu verwenden - 1. funktioniert es dann auch nicht und 2. hängt sich das Fenster "Warten Sie bis sich MODx neu aufbaut" im Manager auf (geht nicht mehr weg).

Die Errormeldung die mir die Web Developer Toolbar im FF anzeigt lautet: Error: E.injectBefore is not a function
Source File: manager/media/script/mootools/mootools.js
Line: 350

Hast du noch den einen oder anderen Tip für mich? Würde das Accordion Menü fast dringend brauchen.

LG
Michael
Thomas Jakobi
Re: Öffnen des Menüs mit Mouse-Over
am 6. Juli. 2009, 01:39:03 Uhr
Im Javascript vor den schließenden Klammern (2. Zeile von unten) folgendes einfügen:

$$('li.toggler').addEvent('mouseenter', function() { this.fireEvent('click'); });
Max
Öffnen des Menüs mit Mouse-Over
am 1. Juli. 2009, 20:00:57 Uhr
Hallo,
Danke für das tolle Menü. Ist es auch möglich dieses mit Mouse-Over, statt mit einem Klick zu öffnen?

Danke,
Max
Thomas Jakobi
Re: Mehr als zwei Ebenen
am 21. Juli. 2008, 15:52:31 Uhr
Wie es auch in der Anleitung steht: Bei einer tieferen Verschachtelung des Menüs mit mehr als zwei Ebenen müsste das Javascript z.B. mit UltimateParent modifiziert werden. D.h. das automatische Ausklappen funktioniert ab der dritten Ebene nicht (egal mit welchem Browser). Im verschachtelten Akkordeon von Bogdan ist das besser gelöst.

Weiterhin muss der User in einem tiefer verschachtelten Menü sehr viel klicken um einen Überblick über die Unter-Unterpunkte zu bekommen und deshalb finde ich den Akkordeon-Effekt nur für eine Ebene sinnvoll. Für ein Menü mit weiteren Ebenen würde ich auf jeden Fall eine andere Menüart wählen.
Simon Schick
Mehr als zwei Ebenen
am 21. Juli. 2008, 14:12:41 Uhr
Das was du hier vorgeschlagen hast funktioniert ab der 2. Ebene im IE6 gar nicht ...
Hier ist noch was für verschachtelte Menus:
http://blog.medianotions.de/de/artikel/2008/mootools-verschachteltes-accordion

Es funktioniert auch im IE6 :)

Ich bin gerade am Arbeiten mit den Klassennamen und hab auch schon einen Ansatz: Der Parameter "&levelClass"

Viel Spass beim Tüfteln :D
Thomas Jakobi
Re: Menü nicht eingeklappt
am 14. März. 2008, 11:30:22 Uhr
Wenn kein Ordner des Menüs beim Seitenaufruf eingeklappt ist, dann funktioniert das Akkordeon-Javascript nicht. Bitte den Pfad der Mootools-Bibliothek überprüfen.

Hilfe bei CSS-Fragen kann ich aus Zeitgründen leider nicht (kostenlos) geben.
Daniel
Menü nicht eingeklappt
am 14. März. 2008, 09:36:27 Uhr
Guten Morgen

Ich habe zwei grundsätzliche Probleme. Wenn ich beim Wayfinder "&level=`2`" mitgebe, sind bei mir die Unterdokumente bereits aufgeklappt, wenn ich auf die Seite komme. Eigentlich müssten diese doch erst aufklappen, wenn ich auf die jeweiligen "Hauptordner" klicke?

Weiter habe ich unter jedem aufgeklappten Dokument eine weisse Linie, (wie) kann ich diese mit CSS wegkriegen?

Vielen Dank und lieben Gruss,
Daniel
Kommentare 1 bis 10 von 18 | Nächste | Letzte

Kommentar schreiben

  • Benötigte Felder sind mit einem Stern (*) markiert.
  • Es ist nicht möglich im Kommentar URLs und Links zu hinterlassen.