Shopware Dropdown Menü

Onlineshops mit Shopware sind ordentlich aufzubauen und bieten eine gute Usability für Shopbetreiber und Nutzer - mit älteren Browsern jedoch steht Shopware - anders kann man es leider nicht nennen - auf Kriegsfuß. Hier ein Beispiel, wie Shopware einen Onlineshop-Programmierer einige Stunden kosten kann: Im Standardtemplate von Shopware kann man das Dropdown-Servicemenü oben rechts nicht öffnen, da dies nach kurzem Aufklappen umgehend wieder verschwindet. Aufgetreten ist dieses Problem auf einem Samsung Galaxy Tab 3 10.1 (GT-P5200) auf dem nativen Android-Browser. Grund ist hier das gleichzeitige Ausstatten mit "click"- und "touchstart"-Listenern, welches in

 

 /themes/Frontend/Responsive/frontend/_public/src/js/jquery.drop-down-menu.js

 

implementiert ist, genauer in der Zeile

 

me._on(me.$el, 'touchstart click', $.proxy(me.onClickMenu, me));

 

Was moderne Browser ausnahmslos verstehen ist bei unserem Galaxy Tab 3 nun besondert zu behandeln. So ist ein Weg, die Funktion "onClickMenu" anzupassen und diese in dieser Form zu verändern:

 

 

        onClickMenu: function (event) {

                var me = this;

                var flag = me.opts.flag;

                                                                             

            me.applyDataAttributes();

            if ($(event.target).is(me.opts.blockedElements)) {

                return;

            }

            if (me.opts.preventDefault) {

                event.preventDefault();

            }

                                               if (!flag) {

                                                               me.opts.flag = true;

                                                               setTimeout(function(){ me.opts.flag = false; }, 500);

                                                               me.$el.toggleClass(me.opts.activeCls);

                                               }

            if (me.opts.closeOnBody) {

                event.stopPropagation();

               $('body').on(me.getEventName('touchstart click'), $.proxy(me.onClickBody, me));

            }

            $.publish('plugin/swDropdownMenu/onClickMenu', [ me, event ]);

        },

 

Heißt also, wir setzen beim ersten Ausführen einen Marker, den wir erst nach 0,5 Sekunden wieder zurück stellen um eine doppelte Ausführung des onClickMenu bzw. des dort enthaltenen toggleClass-Befehls zu verhindern. Onlienshop: Shopware 5.3.7.