Magento2 - วิธีขยายวิดเจ็ต jQuery (configurable.js)


17

ฉันกำลังสร้างส่วนขยายที่แทนที่ป้ายกำกับตัวเลือกที่กำหนดค่าเริ่มต้น 'เลือกตัวเลือก ... ' ด้วยชื่อแอตทริบิวต์ตัวอย่างเช่น 'เลือกสี ... '

ฉันจะขยาย (ไม่แทนที่!) วิดเจ็ต jQuery ที่สามารถกำหนดค่าได้และปรับเปลี่ยนบรรทัดนี้ได้อย่างไร

ฉันรู้จากเอกสารที่ฉันสามารถแทนที่วิดเจ็ต 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;
});

ฉันจะเริ่มต้นไฟล์นี้ได้อย่างไร ฉันควรจะโหลดมันผ่าน requirejs-config ไหม ฟังก์ชั่นแผนที่ใช้สำหรับการเอาชนะเท่านั้นใช่มั้ย

เป็นไปได้หรือไม่ที่จะแก้ไขบรรทัดนี้เท่านั้น? มันถูกเรียกจากฟังก์ชั่นนี้:

_fillSelect: function (element) {}

คำตอบ:


28

ประการแรกคุณต้องแน่ใจว่าโมดูลของคุณมี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 ชั่วโมง (จำกัด จำนวน stackexchange) @Alex คุณสามารถโทรหาผู้ปกครองได้โดยใช้ this._super (); ฟังก์ชัน ดู: learn.jquery.com/jquery-ui/widget-factory/extending-widgets/…
Silvan

มีอะไรอีกบ้างที่ต้องทำ? ทำให้ไฟล์ที่กำหนดเองของฉันจะไม่โหลด ... ทำตามที่อธิบายไว้ข้างต้น :-(
roman204

1
มันใช้งานได้ดี! @ roman204 ฉันมีปัญหาเดียวกัน: ตรวจสอบให้แน่ใจว่าคุณมีโหนด "ลำดับ" ในไฟล์ module.xml ของคุณ จากนั้นเป็นสิ่งสำคัญในการโหลดคำสั่งโมดูลอีกครั้ง วิธีเดียวที่จะทำในขณะนี้คือการปิดการใช้งานและเปิดใช้งานโมดูลที่คุณใส่ "ลำดับ" ในไฟล์ module.xml (ข้อมูลเพิ่มเติม: ดูส่วนสีน้ำเงินในหน้านี้: devdocs.magento.com/guides/v2.2/extension-dev-guide/build/ ...... )
Stijn Duynslaeger - Echron
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.