Magento 2 - Como substituir arquivo javascript de frontend

Oct 10 2020

Preciso substituir um arquivo javascript de um módulo personalizado em:

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

porque preciso substituir uma linha de código nele para substituir um modelo por meu próprio módulo:

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

     ...

Como posso substituir essa linha de meu próprio modelo?

Eu criei este arquivo 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
            }
        }
    }
};

Em seguida, copiei o arquivo one-step-layout.js para app \ code \ Company \ Shipping \ view \ frontend \ web \ js \ model \ one-step-layout.js .

Isso deve misturar meu script ao script original.

Qual código é necessário em meu arquivo layout.js de uma etapa para substituir o modelo e carregar meu próprio modelo?

Respostas

2 HirenPatel Oct 10 2020 at 00:27

Magento fornece 2 maneiras de substituir o arquivo js.

  1. mapa
  2. mixin

O Mixin é bastante complicado e o mapa é realmente fácil de entender.

Para substituir o arquivo js, ​​primeiro você deve criar o módulo. Para criar um módulo personalizado, você precisa dos seguintes arquivos em app / code / Company / Shipping /. Espero que você tenha criado isso.

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

então, você deve criar o arquivo requirejs-config.js aqui app / code / Company / Shipping / view / frontend / requirejs-config.js conforme você criou, mas o conteúdo será alterado aqui.

O conteúdo desse arquivo deve ser o mesmo que abaixo.

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

e copie o código do arquivo js original para app / code / Company / Shipping / view / frontend / web / js / model / one-step-layout.js

e faça as alterações aqui.

então você tem que executar o comando do magento.

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

Se isso te ajudar então clique em curtir e aceitar como resposta

Obrigado
Hiren Patel