Mở rộng / ghi đè JS trong Magento 2


34

Như Magento2 là sử dụng RequireJS để tải kịch bản, và không có nhiều da thư mục, tôi đã bị mắc kẹt với một vấn đề:

Làm cách nào tôi có thể thay thế tệp JS mô-đun của Magento bằng phiên bản sửa đổi của mình?

Ví dụ: opc-checkout-method.js thuộc phần mở rộng Magento_Checkout. Nó không được định nghĩa trong tệp allowjs-config.js, theo như tôi có thể thấy.

Tiện ích mở rộng của tôi được tải sau Magento_Checkout , do đó, dữ liệu requestjs-config.js của nó được nối vào cuối tập tin allowjs-config.

Hoặc tôi nên làm điều đó theo một cách khác, mà không thay thế toàn bộ kịch bản?


1
Tôi sẽ tưởng tượng bạn không nên thay thế tệp nhiều như thay thế (các) chức năng trên đối tượng được tải bởi tệp.
Peter O'Callaghan

Câu trả lời:


93

Không có thư mục skin nữa nhưng bạn vẫn có thể sử dụng các chủ đề.

Như một bằng chứng về khái niệm tôi đã sử dụng bạn ví dụ với op-checkout-method.jsvà điều này.

Điều kiện tiên quyết:

  • Đã cài đặt Magento2-beta11
  • Chủ đề mặc định hoạt động (để trống).
  • Không có tệp nào được tạo trong pub/staticthư mục (xóa thư mục pub / static / frontend)

Hành động:

  • Sao chép op-checkout-method.jstệp từ vị trí mô-đun app/code/Magento/Checkout/view/frontend/web/js/opc-checkout-method.jssang chủ đề trống sangapp/design/frontend/Magento/blank/Magento_Checkout/web/js/opc-checkout-method.js
  • chỉnh sửa tệp bản sao và thêm một console.log('something')hoặc alert('something')trong _createchức năng của mage.opcCheckoutMethodtiện ích.
  • xóa bộ nhớ cache của trình duyệt.

Kết quả:

  • Khi tải trang thanh toán, tôi thấy cảnh báo của mình được hiển thị hoặc văn bản được ghi trong bảng điều khiển.

Thông tin liên quan:

Nếu tôi chạy từ cli php dev/tools/Magento/Tools/View/deploy.php(tập lệnh xuất bản tài nguyên tĩnh), tệp js mới của tôi sẽ được đặt vàopub/static/frontend/Magento/blank/en_US/Magento_Checkout/js/opc-checkout-method.js

[CHỈNH SỬA]

Tôi tìm thấy một cách để làm điều đó thông qua một mô-đun.

Trong [Namespace]/[Module]/view/frontend/requirejs-config.jsthêm này:

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

Sau đó tạo tập tin [Namespace]/[Module]/view/frontend/web/js/opc-checkout-method.jsvới nội dung của bạn.

Đối với mục đích thử nghiệm, tôi đã sao chép tệp gốc và chỉ cần thêm một lần nữa console.logvào _createhàm.

Cũng nhớ để tạo lại các tài nguyên công cộng cho frontend.


Cảm ơn, Marius! Có thể làm những điều tương tự bên trong phần mở rộng?
DmitryR

Tôi không nghĩ bạn van làm điều đó từ một phần mở rộng. điều đó là không thể trong magento 1 trừ khi bạn thay đổi hoàn toàn mẫu thanh toán. Nhưng tôi sẽ tìm cách để làm điều đó.
Marius

Cảm ơn một lần nữa, Marius. Tôi đang cố gắng thực hiện kiểm tra tùy chỉnh, ghi đè mặc định và tôi bị mắc kẹt với ghi đè JS.
DmitryR 13/03/2015

1
@DmitryR. Xem cập nhật của tôi để trả lời.
Marius

nơi dành cho requirejs-config.js bây giờ người bán hàng / Module / xem / frontend / requirejs-config.js
Eugen Bogdanovich

11

Đây là tài liệu chính thức về việc mở rộng / thay thế các thành phần JS mặc định: http://devdocs.magento.com/guides/v2.0/javascript-dev-guide/javascript/custom_js.html

Phản hồi được chào đón!


3
Chào mừng đến với MagentoSE. Câu trả lời này sẽ hữu ích hơn cho người dùng trong tương lai nếu bạn thêm câu trả lời vào đây, thay vì chỉ liên kết. Nếu liên kết bị hỏng trong tương lai, người tìm kiếm sẽ không tìm thấy thông tin bạn đang tham khảo.
AreDubya

2
Đó là một điểm công bằng nhưng chúng tôi thêm 301 chuyển hướng khi các chủ đề di chuyển để giảm thiểu rủi ro 404s.
Steve Johnson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.