Magento 2 - Jak zastąpić plik javascript frontendu

Oct 10 2020

Muszę nadpisać plik javascript z niestandardowego modułu pod adresem:

vendor \ amasty \ module-single-step-checkout \ view \ frontend \ web \ js \ model \ one-step-layout.js

ponieważ muszę zamienić w nim linię kodu, aby zastąpić szablon moim własnym modułem:

// Checkout layout options model
define([
    'ko',
    'uiRegistry',
    'Amasty_Checkout/js/view/utils'
], function (ko, registry, viewUtils) {
    'use strict';

    const MAPPING_BLOCK_NAME = {
            ...
        },
        CLASS_NAMES = {
            classic: {
                ...
            },
            modern: {
                ...
            }
        },
        BLOCK_ATTRS = {
            ...
        };

    return {
        containerClassNames: ko.observable(''),
        selectedLayout: [],
        checkoutDesign: '',
        checkoutLayout: '',
        checkoutBlocks: {},
        mainAdditionalClasses: '',

        /**
         * Getting checkout block by name
         * @param {String} blockName
         * @returns {observable}
         */
        getCheckoutBlock: function (blockName) {
            var requestComponent = this.checkoutBlocks[blockName]
                || this.requestComponent(MAPPING_BLOCK_NAME[blockName]);

            switch (blockName) {
                case 'shipping_address':
                    if (requestComponent()) {
                        requestComponent().template = 'Amasty_Checkout/onepage/shipping/address';
                    }

                    break;

                case 'shipping_method':
                    if (requestComponent()) {

                        // ▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
                        // I need to replace this line with `Company_Shipping/onepage/shipping/methods`
                        requestComponent().template = 'Amasty_Checkout/onepage/shipping/methods'; 


                    }

                    break;

                default: break;
            }

            return requestComponent;
        },

     ...

Jak mogę zastąpić tę linię z mojego własnego szablonu?

Utworzyłem ten plik app / code / Company / Shipping / view / frontend / requirejs-config.js :

var config = { 
    config: {
        mixins: {
            'Amasty_Checkout/js/model/one-step-layout': {
                'Company_Shipping/js/model/one-step-layout': true
            }
        }
    }
};

Następnie skopiowałem plik one-step-layout.js do app \ code \ Company \ Shipping \ view \ frontend \ web \ js \ model \ one-step-layout.js .

To powinno łączyć mój skrypt z oryginalnym skryptem.

Jaki kod jest wymagany w moim pliku one-step-layout.js , aby zastąpić szablon w celu załadowania własnego szablonu?

Odpowiedzi

2 HirenPatel Oct 10 2020 at 00:27

Magento zapewnia 2 sposoby zastąpienia pliku js.

  1. mapa
  2. mixin

Mixin jest dość skomplikowany, a mapa jest naprawdę łatwa do zrozumienia.

Aby nadpisać plik js, musisz najpierw utworzyć moduł. Aby stworzyć niestandardowy moduł, potrzebujesz następujących plików w aplikacji / kod / Firma / Wysyłka /. Mam nadzieję, że to stworzyłeś.

  1. register.php
  2. etc / module.xml

następnie musisz utworzyć plik requirejs-config.js tutaj app / code / Company / Shipping / view / frontend / requirejs-config.js tak, jak tworzyłeś, ale zawartość zmieni się tutaj.

Zawartość tego pliku powinna być taka sama jak poniżej.

var config = {
map: {
    '*': {
        'Amasty_Checkout/js/model/one-step-layout':'Company_Shipping/js/model/one-step-layout'
        }
    }
};

a następnie skopiuj oryginalny kod pliku js do app / code / Company / Shipping / view / frontend / web / js / model / one-step-layout.js

i wprowadź zmiany tutaj.

musisz uruchomić polecenie magento.

Konfiguracja php bin / magento: aktualizacja konfiguracji
php bin / magento: static-content: deploy

Jeśli to ci pomoże, naciśnij Lubię i zaakceptuj jako odpowiedź.

Dziękuję
Hiren Patel