Magento2 - Wie man das jQuery Widget erweitert (configure.js)

15

Ich erstelle eine Erweiterung, die die standardmäßig konfigurierbare Optionsbezeichnung "Option auswählen ..." durch den Attributnamen ersetzt, z. B. "Farbe auswählen ...".

Wie kann ich das jQuery-Widget configureable.js erweitern (nicht überschreiben!) Und nur diese Zeile ändern?

Aus der Dokumentation weiß ich, dass ich ein jQuery-Widget überschreiben kann.

define([
    'jquery',
    'jquery/ui',
    'configurable' // usually widget can be found in /lib/web/mage dir
], function($){

    $.widget('silvan.configurable', $.mage.configurable, {

    });

    return $.silvan.configurable;
});

Wie kann ich diese Datei initialisieren? Soll ich es über requirejs-config laden? Die Kartenfunktion ist nur zum Übersteuern gedacht oder?

Ist es möglich, nur diese Zeile zu ändern? Es wird von dieser Funktion aufgerufen:

_fillSelect: function (element) {}
Silvan
quelle

Antworten:

25

Zunächst müssen Sie sicherstellen, dass Ihr Modul Magento_ConfigurableProductin der folgenden Reihenfolge vorliegt module.xml:

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Vendor_ModuleName" setup_version="1.0.0">
        <sequence>
            <module name="Magento_ConfigurableProduct"/>
        </sequence>
    </module>
</config>

Stellen Sie sicher, dass Sie die Komponentenliste in neu generieren config.php. Andernfalls wird die Reihenfolge ignoriert ( http://devdocs.magento.com/guides/v2.2/extension-dev-guide/build/module-load-order.html ).

Dann fügen Sie die requirejs-config.jsDatei in das view/frontendVerzeichnis mit dem Code:

var config = {
    map: {
        '*': {
            configurable: 'Vendor_ModuleName/js/configurable'
        }
    }
};

Schließlich fügen Sie die configurable.jsDatei in das view/frontend/web/jsVerzeichnis mit:

define([
    'jquery',
    'jquery/ui',
    'Magento_ConfigurableProduct/js/configurable'
], function($){

    $.widget('silvan.configurable', $.mage.configurable, {
        //code you want to override
    });

    return $.silvan.configurable;
});

Sie können einzelne Zeilen nicht modifizieren, aber Sie können einzelne Funktionen innerhalb modifizieren.

Bartłomiej Szubert
quelle
Wie funktioniert das Ändern einer Funktion? Wie rufe ich die Eltern an?
Alex
Sie können auch andere Funktionen aufrufen, die Sie so ändern, als ob sie Teil Ihres Widgets wären. Ihr silvan.configurableerbt automatisch alles vom Elternteil.
Bartłomiej Szubert
2
Das funktioniert super, danke @Ideo! Das Kopfgeld wird in 7 Stunden ausgezahlt (Limit des Stapelwechsels). @Alex Sie können das übergeordnete Element mit this._super () aufrufen. Funktion. Siehe: learn.jquery.com/jquery-ui/widget-factory/extending-widgets/…
Silvan
Gibt es noch etwas zu tun? weil meine benutzerdefinierte Datei nicht geladen wird ... hat es genau wie oben beschrieben :-(
roman204
1
Das funktioniert super! @ roman204 Ich habe das gleiche Problem: Stellen Sie sicher, dass Sie den Knoten "sequence" in Ihrer module.xml-Datei haben. Dann ist es wichtig, die Modulreihenfolge neu zu laden. Die einzige Möglichkeit, dies zu tun, besteht im Moment darin, das Modul zu deaktivieren und wieder zu aktivieren, in dem Sie die "Sequenz" in die Datei module.xml eingefügt haben. (Weitere Informationen: Sehen Sie sich den blauen Teil auf dieser Seite an: devdocs.magento.com/guides/v2.2/extension-dev-guide/build/… )
Stijn Duynslaeger - Echron