การขยาย / ลบล้าง JS ใน Magento 2


34

Magento2 กำลังใช้ RequireJS สำหรับการโหลดสคริปต์และไม่มีโฟลเดอร์สกินอีกต่อไปฉันจึงติดปัญหา:

ฉันจะแทนที่ไฟล์ JS ของโมดูลวีโอไอพีด้วยเวอร์ชันที่แก้ไขของฉันได้อย่างไร

ตัวอย่างเช่น - opc-checkout-method.jsซึ่งเป็นของส่วนขยาย Magento_Checkout มันไม่ได้กำหนดไว้ในไฟล์ requirejs-config.js เท่าที่ฉันเห็น

ส่วนขยายของฉันถูกโหลดหลังจากMagento_Checkoutดังนั้นข้อมูล requirejs-config.js จะถูกต่อท้ายท้ายไฟล์ requirejs-config

หรือฉันควรทำอย่างอื่นโดยไม่เปลี่ยนสคริปต์ทั้งหมด?


1
ฉันคิดว่าคุณไม่ควรแทนที่ไฟล์มากเท่าการเปลี่ยนฟังก์ชั่นบนวัตถุที่โหลดโดยไฟล์
Peter O'Callaghan

คำตอบ:


93

ไม่มีโฟลเดอร์สกินอีกต่อไป แต่คุณยังสามารถใช้ชุดรูปแบบได้

เพื่อเป็นการพิสูจน์แนวคิดฉันใช้ตัวอย่างกับคุณop-checkout-method.jsและสิ่งนี้

เงื่อนไข:

  • ติดตั้ง Magento2-beta11 แล้ว
  • ธีมเริ่มต้นใช้งาน (ว่าง)
  • ไม่มีไฟล์ที่สร้างในpub/staticโฟลเดอร์ (ลบโฟลเดอร์ pub / static / frontend)

ดำเนินการ:

  • คัดลอกop-checkout-method.jsไฟล์จากตำแหน่งโมดูลapp/code/Magento/Checkout/view/frontend/web/js/opc-checkout-method.jsไปยังธีมว่างไปที่app/design/frontend/Magento/blank/Magento_Checkout/web/js/opc-checkout-method.js
  • แก้ไขไฟล์โคลนและเพิ่มconsole.log('something')หรือalert('something')ใน_createฟังก์ชั่นของmage.opcCheckoutMethodวิดเจ็ต
  • ล้างแคชเบราว์เซอร์

ผล:

  • เมื่อหน้าเช็คเอาต์โหลดขึ้นมาฉันเห็นการแจ้งเตือนปรากฏขึ้นหรือข้อความที่บันทึกไว้ในคอนโซล

ข้อมูลที่เกี่ยวข้อง:

ถ้าฉันเรียกใช้จาก cli php dev/tools/Magento/Tools/View/deploy.php(สคริปต์ที่เผยแพร่ทรัพยากรคงที่) ไฟล์ js ใหม่ของฉันจะถูกวางpub/static/frontend/Magento/blank/en_US/Magento_Checkout/js/opc-checkout-method.js

[แก้ไข]

ฉันพบวิธีที่จะทำผ่านโมดูล

ในการ[Namespace]/[Module]/view/frontend/requirejs-config.jsเพิ่มนี้:

var config = {
    map: {
        '*': {
            'Magento_Checkout/js/opc-checkout-method':'[Namespace]_[Module]/js/opc-checkout-method'
        }
    }
};

จากนั้นสร้างไฟล์[Namespace]/[Module]/view/frontend/web/js/opc-checkout-method.jsด้วยเนื้อหาของคุณ

สำหรับวัตถุประสงค์ในการทดสอบฉันโคลนไฟล์ต้นฉบับและเพิ่งเพิ่มอีกครั้งconsole.logใน_createฟังก์ชั่น

นอกจากนี้อย่าลืมสร้างทรัพยากรสาธารณะใหม่สำหรับส่วนหน้า


ขอบคุณ Marius! เป็นไปได้ไหมที่จะทำสิ่งที่คล้ายกันภายในส่วนขยาย
DmitryR

ฉันไม่คิดว่าคุณจะทำอย่างนั้นจากส่วนขยาย ที่เป็นไปไม่ได้ในวีโอไอพี 1 เว้นแต่ว่าคุณจะเปลี่ยนเทมเพลตการชำระเงินอย่างสมบูรณ์ แต่ฉันจะมองหาวิธีที่จะทำ
Marius

ขอบคุณอีกครั้ง Marius ฉันกำลังพยายามใช้การเช็คเอาท์แบบกำหนดเองซึ่งจะแทนที่ค่าเริ่มต้นและฉันติดอยู่กับการแทนที่ JS
DmitryR

1
@DmitryR ดูการอัปเดตคำตอบของฉัน
Marius

สถานที่สำหรับ requirejs-config.js ตอนนี้ผู้ขาย / โมดูล / ดู / ส่วนหน้า / requirejs-config.js
Eugen Bogdanovich

11

นี่คือเอกสารอย่างเป็นทางการเกี่ยวกับการขยาย / แทนที่ส่วนประกอบ JS เริ่มต้น: http://devdocs.magento.com/guides/v2.0/javascript-dev-guide/javascript/custom_js.html

ข้อเสนอแนะยินดีต้อนรับ!


3
ยินดีต้อนรับสู่ MagentoSE คำตอบนี้จะมีประโยชน์มากขึ้นสำหรับผู้ใช้ในอนาคตหากคุณเพิ่มคำตอบที่นี่แทนที่จะเป็นเพียงลิงค์ หากลิงก์เกิดขึ้นอีกในอนาคตผู้ค้นหาจะไม่พบข้อมูลที่คุณอ้างอิง
AreDubya

2
นั่นคือประเด็นที่ยุติธรรม แต่เราเพิ่มการเปลี่ยนเส้นทาง 301 เมื่อหัวข้อย้ายดังนั้นความเสี่ยงของ 404s จะลดลง
Steve Johnson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.