Akkordeon Menü für Layered Navigation
Ich bin mittlereile ein großer Fan von jQuery geworden. Gerade mit Magento kann man über jQuery dynamisch sehr viel anpassen und modifizieren.
Einer unserer Kunden hatte sehr viele Attribute in seiner Layered Navigation, sodass die linke Spalte sehr unübersichtlich wurde. Da möchten wir uns doch die stärken von jQuery zu Nutze machen und mit einem Akkordeon-Effekt etwas für Ordnung sorgen. Alle Attribute außer dem Ersten, sollen ausgeblendet werden. Sobald man auf die Headline klickt soll das angeklickte Attribute ausgeklappt werden und alle anderen eingeklappt.
In unserem Demoshop kann man sich dass schon einmal ansehen: http://shop.mxperts.de/1.3.2/catalog/category/view/s/computers/id/15/ (Auf Brand klicken)
Die Umsetzung:
1. Öffnen Sie die Datei app/design/frontend/default/default/template/catalog/layer/view.phtml
2. Ersetzen Sie
<dt><?php echo $this->__($_filter->getName()) ?></dt>
mit
<dt><a href="/"><?php echo $_filter->getName() ?></a></dt>
3. Kopieren Sie folgenden Code and Ende der Datei:
<script type="text/javascript">
jQuery(document).ready(function(){
jQuery("dl#narrow-by-list> dd:not(:first)").hide();
jQuery("dl#narrow-by-list> dt a").click(function(){
jQuery("dl#narrow-by-list> dd:visible").slideUp("fast");
jQuery(this).parent().next().slideDown("fast");
return false;
});
});
</script>
4. Aktualisieren Sie im Backende den Cache und laden Sie die Website neu
Voilà unser Layered Navigation mit Akkorden Effekt ist schon fertig.
Für dieses Tutorial muss jQuery bereits in Ihren Onlineshop integriert sein! (jQuery in Magento integrieren)
Alternativ können Sie auch diese Variante verwenden:(Anregung von Leiweke)
<script type="text/javascript">
jQuery(document).ready(function(){
jQuery("dl#narrow-by-list> dd:not(:first)").hide();
jQuery("dl#narrow-by-list> dt a").click(function(){
if (jQuery(this).parent().next().is(':hidden')) {
jQuery(this).parent().next().slideDown("fast");
} else {
jQuery(this).parent().next().slideUp("fast");
}
return false;
});
});
</script>
Zu sehen unter http://shop.mxperts.de/catalog/category/view/s/computers/id/15/
Guten Tag,
dieser Vorschlag gefällt mir super. Eine Frage dazu: Wie kann ich es verhindern das wenn auf eine Auswahl geklickt wird, das dann alle andern Punkte ausgeblendet wird. Ich hätte es gerne das alle Punkte stehen bleiben und der selektierte einfach bold wird. Das hätte den Vorteil das nicht immer wieder Filter entfernen geklickt werden muss.
Vielen Dank
Leiweke
ps die Webseite ist super
War diese Antwort hilfreich?
LikeDislike@Leiwerke: Steige zwar selber gerade in das Thema ein aber ich denke es hat mit der “.hide();” zu tun.
@Johannes: Jetzt kommt eine der Stärken dieser JavaScript-Anwendungen zum Vorschein. Eine gute Raumausnutzung und ein Verhalten was der Anwender erwartet – etwa von einer Desktop Applikation.
Danke für das kleine Tutorial in bewährter Qualität!
War diese Antwort hilfreich?
LikeDislikeNun habe ich die alternative integriert. Mit .is(‘:hidden’) kann man den Status abfragen und das Element entsprechend öffnen oder schließen.
Viele Grüße
Johannes Teitge
War diese Antwort hilfreich?
LikeDislikeHi,
ich setze in meinem Magentoshop auch auf jquery und möchte noch folgenden Vorschlag einreichen.
Javascript gehört nicht in die Views. Zwar sind wir bei Magento bereits von Hause aus genug damit bestraft, aber wir sollten es nicht noch schlimmer machen.
Ich schreibe meine jQuery Scripte deshalb in eine eigene JS-Datei und binde diese dann über die XML Dateien am ENDE der Seiten ein.
War diese Antwort hilfreich?
LikeDislikeHallo,
das stimmt in diesem Fall könnte man dies tun, da die Layered Naviagtion von vielen Seiten des Shops benutzt wird.
Ich halte es aber so, dass ich nur Code auslagere der den ganzen Shop betrifft. Somit verhindert man, dass auf jeder Seite Code geladen wird, der unter Umständen nie ausgeführt werden müsste.
Viele Grüße
Johannes Teitge
War diese Antwort hilfreich?
LikeDislikeWill mich da zwar nicht einmischen aber
1. – Inkludierte Dateien wie Skripte oder CSS-Files werden beim Laden der Seite im Browser nur ein Mal in den Browsercache geladen und danach (etwa) auf Folgeseiten arbeitet der Browser aus dem Cache heraus. Da wird also nichts doppelt geleaden und sinnlos mitgeschleppt.
2. – Hier werden in den Tutorials verschiedene Ansätze gefahren. Etwa im Beispiel mit der Sperre der rechten Maustaste. Dort wird im Gegensatz eine eigene .js Datei erzeugt & die Verknüpfung über XML realisiert.
Ich denke mal es sollte jeder so machen wie er denkt & für richtig hält. So lange nicht vor dem Seiteninhalt ein 30-Zeiliger Scriptblock kommt ist das so ziemlich egal.
Im Zweifel verhällt sich der Browser hier sowieso wie bei CSS (näher beim tatsächlichen Code wird ernster genommen und gilt im Zweifel als das was umgesetzt wird).
War diese Antwort hilfreich?
LikeDislikeHallo Daniel,
es geht mir eigentlich nicht um das Einlesen der Datei, sondern um unnötige Events und Funktionen. Mit jQuery werden meist HTML-Elemente verändert, erweitert und mit Events belegt. Ist dies zum Beispiel nur für die Detailansicht von Produkten bestimmt, so sollte der Code auch nur dort ausgeführt werden. Wenn z.B. auf anderen Seiten die Klassen gleich bezeichnet sind, kann dies sogar zu Fehlern oder unschönen Effekten führen.
Also man muss schon wissen wo man den jQuery Code einbindet. Bei diesen einfachen Beispielen hier im Block ist das vermutlich nicht wirklich zu erkennen.
War diese Antwort hilfreich?
LikeDislike