Magento2 - Як розширити віджет jQuery (configigurable.js)


18

Я створюю розширення, яке замінює налаштування за замовчуванням мітку параметрів "Select a Option ..." з назвою атрибута, наприклад "Select a Color ...".

Як я можу розширити (не замінити!) Віджет jQuery configigurable.js і змінити лише цей рядок?

З документації я знаю, що я можу замінити віджет jQuery, тому я зробив:

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

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

    });

    return $.silvan.configurable;
});

Як я можу ініціалізувати цей файл? Чи слід завантажувати його через Requjs-config? Функція карти призначена лише для переосмислення права?

Чи можна лише змінити цей рядок? Викликається з цієї функції:

_fillSelect: function (element) {}

Відповіді:


29

По-перше, вам потрібно переконатися, що ваш модуль має Magento_ConfigurableProductпослідовність у 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>

Не забудьте відновити список компонентів у config.php, інакше послідовність буде проігнорована ( http://devdocs.magento.com/guides/v2.2/extension-dev-guide/build/module-load-order.html )

Потім додайте requirejs-config.jsфайл у view/frontendкаталог з кодом:

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

Нарешті додайте configurable.jsфайл у view/frontend/web/jsкаталог із:

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

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

    return $.silvan.configurable;
});

Ви не можете змінити одну лінію, але ви можете змінити одну функцію всередині.


Як працює зміна функції? Як викликати батьків?
Олексій

Ви можете зателефонувати за іншими функціями, які ви не змінювали, як це було частиною вашого віджета. Ви silvan.configurableавтоматично успадковуєте все від батьківського.
Bartłomiej Szubert

2
Це чудово працює, дякую @Ideo! Баунті будуть надані через 7 годин (ліміт обміну ставками). @Alex ви можете зателефонувати до батьків, скориставшись this._super (); функція. Дивіться: learn.jquery.com/jquery-ui/widget-factory/extending-widgets/…
Сільван

є ще щось тодо? тому що мій користувальницький файл не завантажуватиметься ... зробив це точно так, як описано вище :-(
roman204

1
Це чудово працює! @ roman204 У мене така сама проблема: переконайтеся, що у вашому файлі module.xml є "послідовність". Тоді важливо перезавантажити замовлення модуля. Єдиний спосіб зробити це на даний момент - це відключити і знову включити модуль, куди ви помістите "послідовність" у файл module.xml. (Детальніше: переглянути блакитну частину на цій сторінці: devdocs.magento.com/guides/v2.2/extension-dev-guide/build/… )
Stijn Duynslaeger - Echron
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.