Magento2: Come posso sostituire il modulo core js price-box.js


15

Ho bisogno di estendere Magento_Catalog/js/price-box.js. Ho usato la funzione 'mixins', ma non funziona price-box.js.

requirejs-config.js:

var config = {
    config: {
        mixins: {
            'Magento_Catalog/js/price-box': {
                'My_Module/js/price-box/pluggin': true
            }
        }
    }
};

My_Module/view/frontend/web/js/price-box/pluggin.js

define(function () {
    'use strict';

    return function (target) { 
        // modify target
        var reloadPrice = target.reloadPrice;
        target.reloadPrice = function() {
           cosole.log("hello");
        };
        return target;
    };
});

Yogesh, dai qualche informazione in più su questo.
Codrain Technolabs Pvt Ltd,

Risposte:


12
  1. Specificare il file js PriceBox nel modulo personalizzato requirejs-config.jscon lo stesso nome con cui è già dichiarato nei moduli core. nel nostro caso è priceBoxcome sotto. I tuoi moduli requirejs-config.jssarebbero qualcosa di simile

    var config = {
        map: {
             '*': {
                    priceBox:'namespace_modulename/js/custompricebox',
             }
        }
    };
  2. Ora, crea il file custompricebox.jsnel percorso sopra specificato. presumo che tu voglia estendere il reloadPricemetodo nel prezzo. quindi il tuo custompricebox.jssarebbe come sotto.

    define(
        [
            'jquery',
            'Magento_Catalog/js/price-utils',
            'underscore',
            'mage/template',
            'mage/priceBox',
            'jquery/ui'
        ],
        function ($, utils, _, mageTemplate) {
    
            'use strict';
    
            $.widget('yournamespace.custompriceBox', $.mage.priceBox, {
                /**
                 * Render price unit block.
                 */
                reloadPrice: function reDrawPrices() {
    
                    var priceFormat = (this.options.priceConfig && this.options.priceConfig.priceFormat) || {},
                        priceTemplate = mageTemplate(this.options.priceTemplate);
    
                    _.each(this.cache.displayPrices, function (price, priceCode) {
                        price.final = _.reduce(price.adjustments, function(memo, amount) {
                            return memo + amount;
                        }, price.amount);
    
                        // you can put your custom code here. 
    
                        price.formatted = utils.formatPrice(price.final, priceFormat);
    
                        $('[data-price-type="' + priceCode + '"]', this.element).html(priceTemplate({data: price}));
                    }, this);
                },
    
    
            });
    
            return $.yournamespace.custompriceBox;
        }
    );
  3. Si noti che questo codice non è stato testato. potrebbero esserci degli errori di sintassi. fammi sapere se hai bisogno di più aiuto su questo.


Ciao Yagnesh, possiamo raggiungerlo tramite Mixin? Invece di ignorarlo, possiamo estenderlo anche noi?
Praful Rajput,

@PrafulRajput, non uso ancora il mixin, sicuramente ti aggiornerò su questo una volta che lo faccio.
Codrain Technolabs Pvt Ltd,

2
in qualche modo questo non funziona per me (ver. 2.1.2). Anche mage / priceBox mi dà qualche errore di script.
Prova a volare il

1
Qualcuno è riuscito a riscriverlo tramite Mixin?
Pol Ravalitera,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.