Magento2: Bagaimana saya bisa menimpa modul inti js price-box.js

15

Saya perlu memperpanjang Magento_Catalog/js/price-box.js. Saya telah menggunakan fitur 'mixins', tetapi tidak berfungsi 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 Karodiya
sumber
Yogesh, Berikan beberapa informasi lebih lanjut tentang ini.
Codrain Technolabs Pvt Ltd

Jawaban:

12
  1. Tentukan file js PriceBox di modul khusus Anda requirejs-config.jsdengan nama yang sama dengan yang sudah dinyatakan dalam modul inti. dalam kasus kami priceBoxseperti di bawah ini. Modul Anda requirejs-config.jsakan menjadi seperti itu

    var config = {
        map: {
             '*': {
                    priceBox:'namespace_modulename/js/custompricebox',
             }
        }
    };
  2. Sekarang, buat file custompricebox.jske jalur yang ditentukan di atas. saya berasumsi Anda ingin memperpanjang reloadPricemetode dalam kotak harga. jadi kamu custompricebox.jsakan seperti di bawah ini.

    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. Harap dicatat kode ini tidak diuji. mungkin ada beberapa kesalahan sintaksis. beri tahu saya jika Anda membutuhkan bantuan lebih lanjut tentang ini.

Codrain Technolabs Pvt Ltd
sumber
Hai Yagnesh, bisakah kita mencapainya melalui Mixin? Alih-alih menimpanya, dapatkah kita memperluasnya juga?
Praful Rajput
@PrafulRajput, saya belum menggunakan mixin, saya pasti akan memperbarui Anda tentang ini setelah saya melakukannya.
Codrain Technolabs Pvt Ltd
2
entah bagaimana ini tidak bekerja untuk saya (ver. 2.1.2). Juga mage / priceBox memberi saya beberapa kesalahan skrip.
TrytoFly
1
Apakah seseorang berhasil menulis ulang melalui Mixin?
Pol Ravalitera