Magento 2 - Come sovrascrivere il file javascript di frontend

Oct 10 2020

Ho bisogno di sovrascrivere un file javascript da un modulo personalizzato su:

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

perché ho bisogno di sostituire una riga di codice al suo interno per sostituire un modello con il mio modulo:

// 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;
        },

     ...

Come posso sovrascrivere quella riga dal mio modello?

Ho creato questo file app / code / Company / Shipping / view / frontend / requirejs-config.js file:

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

Quindi ho copiato il file one-step-layout.js in app \ code \ Company \ Shipping \ view \ frontend \ web \ js \ model \ one-step-layout.js .

Questo dovrebbe mescolare il mio script con lo script originale.

Quale codice è richiesto nel mio file one-step-layout.js per sostituire il modello e caricare il mio modello?

Risposte

2 HirenPatel Oct 10 2020 at 00:27

Magento fornisce 2 modi per sovrascrivere il file js.

  1. carta geografica
  2. mixin

Il mixin è abbastanza complicato e la mappa è davvero facile da capire.

Per sovrascrivere il file js prima devi creare il modulo. Per creare un modulo personalizzato è necessario seguire i file in app / code / Company / Shipping /. Spero tu l'abbia creato.

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

quindi devi creare il file requirejs-config.js qui app / code / Company / Shipping / view / frontend / requirejs-config.js come hai creato ma il contenuto cambierà qui.

Il contenuto di quel file dovrebbe essere lo stesso come sotto.

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

e quindi copia il codice del file js originale in app / code / Company / Shipping / view / frontend / web / js / model / one-step-layout.js

e apporta le modifiche qui.

quindi devi eseguire il comando di magento.

php bin / magento setup: aggiorna
php bin / magento setup: static-content: deploy

Se questo ti aiuta, premi Mi piace e accetta come risposta.

Grazie
Hiren Patel