Gerade als Shopware Entwickler ist es wichtig den Aufbau von jQuery Plugins und dem StateManager zu verstehen. Da alle Plugins nach einem Publish / Subscribe Muster aufgebaut sind ermöglicht es Shopware bestehende Plugins mit eigenen Funktionen zu erweitern. Allerdings reicht es manchmal nicht aus nur auf das Event zu subscriben, wenn man die ganze Funktion umschreiben möchte.
In diesem Blogpost schauen wir uns an, wie wir die vorhandenen jQuery Plugins von Shopware überschreiben. Ich zeige Euch wie Ihr ganz einfach jQuery Plugins überschreiben könnt, ohne gleich den ganzen Code zu ersetzen und damit Fehler verursacht. Für den Anfang wäre es ideal, wenn Ihr schonmal mit Javascript oder JQuery gearbeitet habt. Falls nicht, kein Problem es geht auch so!
Shopware hat eine neue Methode eingeführt die es ermöglicht Plugins zu überschreiben. Diese Methode nennt man $.overridePlugin, diese ist an das jQuery Objekt gebunden und kann so überall im Storefront verwendet werden.
Wir müssen also um ein Plugin komplett überschreiben zu wollen im Grunde den Namen des Plugins und den Namen der Methode kennen. Im Beispiel zeige ich Euch wie Ihr den Product Slider überschreiben könnt:
;(function ($, window) {
'use strict';
$.overridePlugin('swProductSlider', {
override the plugin functions
});
})(jQuery, window);
Wichtig ist das die Quelldatei in Eurem Plugin im frontend/ _public/src/js/ Ordner befindet und genau so benannt ist wie die Datei, die Ihr überschreiben wollt. Wie hier zum Beispiel frontend/ _public/src/js/jquery.product-slider.js. Das war es auch schon! Total einfach, oder? :)
UPDATE: Solltest Du ein Theme haben, musst Du die js Datei noch in das $javascript Array in Deiner Theme.php hinterlegen.
protected $javascript = [
'src/js/jquery.product-slider.js'
];
Wenn Ihr nicht die ganze Funktion überschreiben möchtet, sondern nur einen Teil könnt Ihr auch mit der extend Methode arbeiten. Shopware hat die Möglichkeit hinzugefügt die Ursprungsfunktion aufzurufen und Ihr zusätzliche Logik hinzuzufügen. Dieses könnt Ihr mit der Oberklasse superclass machen. Hier zeige ich Euch ein Beispiel wie man im Product Slider die init Function erweitert, ohne alles zu überschreiben:
;(function ($, window) {
'use strict';
$.overridePlugin('swProductSlider', {
init: function () {
var me = this;
me.superclass.init.apply(this,arguments);
}
});
})(jQuery, window);
In der Shopware Dokumentation wird Dir nochmal genau erklärt wie die JQuery Plugins aufgebaut sind und wie Du zum Beispiel mit dem StateManager arbeitest. Mehr Iinfos gibt es hier: https://developers.shopware.com/designers-guide/javascript-statemanager-and-pluginbase/
Unsere Standorte
Zentrale
Technologiepark 23
33100 Paderborn
Leipzig
Bernhardstraße 34
04315 Leipzig
Kontakt
E-Mail: support@8mylez.com
Telefon: +49 (0) 5251 284 710
Shopware Dienstleistungen
Über 8mylez
✓ 38 Mitarbeiter
✓ Shopware Gold Partner
✓ 40.000+ Plugin Downloads
✓ 160+ betreute Shops
✓ Full-Service Shopware Agentur
✓ 70 Shopware Videos auf Youtube
✓ Alle Shopware Zertifizierungen
Social
Flo
Damit die Änderungen wirksam werden, muss zusätzlich noch ein Eintrag in der Theme.php des eigenen Themes für die Überladung gemacht werden.
In meinem Fall habe ich das jquery.emotion.js Plugin überladen und dazu den folgenden Eintrag hinzugefügt:
protected $javascript = [
'src/js/jquery.emotion.js'
];
Alexander Wolf
vielen Dank für den Hinweis! Ich habe den Blog Beitrag angepasst und erweitert, dass es bei einem Theme noch in die Theme.php eingetragen werden muss.
Gruß
Alexander
Was denkst du?