Storytelling scrollt beim Click auf ein Collapse Panel nach unten

Hallo Community, 

ich binde über ein eigenes Plugin ein Collapse Panel ein und verwende damit das Shopware Plugin swCollapsePanel automatisch mit - ist ja schöner als das Rad neu zu erfinden und zusätzlichen Code einzubauen. 

Leider subscribed das Storytelling Plugin in der jquery.storytelling.js dazu auf die Events plugin/swCollapsePanel/onOpen und plugin/swCollapsePanel/onClose  und ruft die Methode “onFooterPanel” auf und scrollt die Seite nach unten!

/**
         * Called by opening or closing a panel in the footer on the mobile viewport.
         * Sets the new bottom offset and slides down the footer end.
         */
        onFooterPanel: function () {
            var me = this;

            me.scrollTop = me.getScrollTop();
            me.offsetBottom = me.$pageWrap.height() - me.viewportHeight;

            me.scroll(me.offsetBottom);
        },

Dabei findet aber keine Prüfung statt, ob es sich tatsächlich um die Footer Panels handelt. Andere Collapse Panels, welche nicht im Footer liegen sind somit ebenfalls betroffen, was zu einem unschönen Effekt des Herunterscrollens zum Footer führt.

Wie kann ich nun im Rahmen meines Plugins darauf reagieren? Die Methode mit overridePlugin kann ich nur mit einem Theme überschreiben - also keine Möglichkeit. Hat jemand daher eine Idee wie ich nun in meinem Plugin sicherstellen kann, dass nicht nach unten gescrollt wird?

Wieso soll das nicht möglich sein?

https://developers.shopware.com/developers-guide/plugin-quick-start/#plugin-resources

https://developers.shopware.com/developers-guide/example-plugin/#plugin-views

@BestShopPossible‍

vielen Dank für Deine Antwort. Ich verstehe leider nicht, wie der Hinweis auf die Plugin-Ressourcen und die der Hinweis auf die Views helfen soll, ein jQuery Plugin auf einem Shopware Plugin mit einem anderen Plugin zu überschreiben. Hier geht es rein um die Javascripts.

In den Ressourcen legst du dir die Shopware-Struktur an:

Ressources->Views->frontend->_public->src->js

Da kommt dann dein js rein, ganz OHNE theme. 

Dein js sieht so aus:

https://developers.shopware.com/designers-guide/javascript-statemanager-and-pluginbase/

dadrin kannst du dann auf alles was du willst subscriben z.B.:

$.subscribe('plugin/swAjaxVariant/onRequestData', function() {
        StateManager.registerListener([{
            state: 'xs',
            enter: function() { console.log('onEnter xs');},
            exit: function() { console.log('onExit xs'); }
        }]);
}

 

@BestShopPossible‍

Ich glaub das ist nicht wirklich das, wonach ich Suche. Mir ist schon klar, dass ich auf Events anderer Plugins subscriben kann und dann abhängig vom Viewport funktionen triggern kann… 

Ich möchte aber eine bestehende Methode eines anderen Plugins überschreiben, ähnliche der Funktion overridePlugin bei Themes…

Dann mach das doch einfach…

Ich habe doch nur eine Beispiel-Subscription geliefert. Aber für dich dann auch gerne noch ein Stupser: 

;(function ($, window, StateManager, undefined) {
    

    $.overridePlugin('swOffcanvasMenu', {
         //DEIN CODE

 

1 „Gefällt mir“

@BestShopPossible‍

Entweder stehe ich gerade auf dem Schlauch oder wir reden aneinander vorbei  Grin

Ich habe ein Plugin und kein Theme , welches unveränderlich ein Plugin und kein Theme ist. overridePlugin() funktioniert meines Wissens nach nur in Themes und nicht in Plugins.

Hallo,

es gibt keine “nur Theme-Funktionen” oder “nur Plugin-Funktionen”, overridePlugin() funktioniert bei Plugins genauso wie bei Themes und kann man dort genauso problemlos nutzen.

Grüße

Sebastian

1 „Gefällt mir“

Okay, ich war der Meinung mal einen Beitrag hier im Forum gelesen zu haben, in dem die allgemeine Meinung war, dass es Einschränkungen beim Überschreiben von jquer Plugins über ein anderes Plugin gäbe. Finde diesen Beitrag nicht mehr - vll. werfe ich hier auch was durcheinander - ist schon einige Zeit her.

 

Das ist zwar nicht der Beitrag, den ich meinte, aber beschäftigt sich auch damit: 

Hier steht allerdings nur „sollte“: „Ein Shopware Plugin sollte die $.overridePlugin() Methode nicht verwenden“

Ja, das sollte man natürlich auch nicht. Wenn du es trotzdem machen möchtest hast du nun ja alles um das umzusetzen.