Magento 2 - Cómo anular el archivo javascript frontend

Oct 10 2020

Necesito sobrescribir un archivo javascript de un módulo personalizado en:

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

porque necesito reemplazar una línea de código para reemplazar una plantilla con mi propio 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;
        },

     ...

¿Cómo puedo anular esa línea de mi propia plantilla?

Creé este archivo 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
            }
        }
    }
};

Luego copié el archivo one-step-layout.js a app \ code \ Company \ Shipping \ view \ frontend \ web \ js \ model \ one-step-layout.js .

Esto debería mezclar mi guión con el guión original.

¿Qué código se requiere en mi archivo one-step-layout.js para reemplazar la plantilla para cargar mi propia plantilla?

Respuestas

2 HirenPatel Oct 10 2020 at 00:27

Magento proporciona 2 formas de anular el archivo js.

  1. mapa
  2. mezclando

Mixin es bastante complicado y el mapa es realmente fácil de entender.

Para anular el archivo js, ​​primero debe crear el módulo. Para crear un módulo personalizado, necesita los siguientes archivos en app / code / Company / Shipping /. Espero que hayas creado eso.

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

luego debe crear el archivo requirejs-config.js aquí app / code / Company / Shipping / view / frontend / requirejs-config.js como lo creó, pero el contenido cambiará aquí.

El contenido de ese archivo debe ser el mismo que se muestra a continuación.

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

y luego copie el código del archivo js original en app / code / Company / Shipping / view / frontend / web / js / model / one-step-layout.js

y haz tus cambios aquí.

entonces tienes que ejecutar el comando de magento.

Configuración de php bin / magento: actualice la configuración de
php bin / magento: static-content: deploy

Si esto te ayuda, haz clic en Me gusta y acepta como respuesta.

Gracias
Hiren Patel