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.