Magento 2 - Comment remplacer le fichier javascript du frontend

Oct 10 2020

J'ai besoin d'écraser un fichier javascript à partir d'un module personnalisé à:

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

car je dois remplacer une ligne de code pour remplacer un modèle par mon propre module:

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

     ...

Comment puis-je remplacer cette ligne de mon propre modèle?

J'ai créé ce fichier 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
            }
        }
    }
};

Ensuite, j'ai copié le fichier one-step-layout.js dans app \ code \ Company \ Shipping \ view \ frontend \ web \ js \ model \ one-step-layout.js .

Cela devrait mélanger mon script au script d'origine.

Quel code est requis dans mon fichier one-step-layout.js pour remplacer le modèle et charger mon propre modèle?

Réponses

2 HirenPatel Oct 10 2020 at 00:27

Magento fournit 2 moyens de remplacer le fichier js.

  1. carte
  2. mixin

Mixin est assez compliqué et la carte est vraiment facile à comprendre.

Pour remplacer le fichier js, vous devez d'abord créer un module. Pour créer un module personnalisé, vous avez besoin des fichiers suivants dans app / code / Company / Shipping /. J'espère que vous avez créé cela.

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

alors vous devez créer le fichier requirejs-config.js ici app / code / Company / Shipping / view / frontend / requirejs-config.js comme vous l'avez créé mais le contenu changera ici.

Le contenu de ce fichier doit être le même que ci-dessous.

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

puis copiez le code du fichier js original dans app / code / Company / Shipping / view / frontend / web / js / model / one-step-layout.js

et apportez vos modifications ici.

alors vous devez exécuter la commande de magento.

configuration de php bin / magento: mise à niveau de la configuration de
php bin / magento: static-content: deploy

Si cela vous aide, cliquez sur J'aime et acceptez comme réponse.

Merci
Hiren Patel