Magento2: Wie kann ich core js module price-box.js überschreiben?

15

Ich muss verlängern Magento_Catalog/js/price-box.js. Ich habe die "Mixins" -Funktion verwendet, aber sie funktioniert nicht 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
quelle
Yogesh, gib mehr Informationen darüber.
Codrain Technolabs Pvt Ltd

Antworten:

12
  1. Geben Sie die js-Datei von PriceBox in Ihren benutzerdefinierten Modulen requirejs-config.jsmit demselben Namen an, mit dem sie bereits in Kernmodulen deklariert wurde. in unserem Fall ist es priceBoxwie unten. Ihre Module requirejs-config.jswären so etwas wie

    var config = {
        map: {
             '*': {
                    priceBox:'namespace_modulename/js/custompricebox',
             }
        }
    };
  2. Erstellen Sie nun die Datei custompricebox.jsunter dem oben angegebenen Pfad. Ich gehe davon aus, dass Sie die reloadPriceMethode in der Preisbox erweitern möchten . so custompricebox.jswäre dein wie unten.

    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. Bitte beachten Sie, dass dieser Code nicht getestet wird. Möglicherweise sind einige Syntexfehler aufgetreten. Lassen Sie mich wissen, wenn Sie weitere Hilfe benötigen.

Codrain Technolabs Pvt Ltd
quelle
Hallo Yagnesh, können wir es über Mixin erreichen? Können wir es auch erweitern, anstatt es zu überschreiben?
Praful Rajput
@PrafulRajput, ich benutze noch kein Mixin, ich werde dich sicherlich darüber auf dem Laufenden halten, sobald ich es tue.
Codrain Technolabs Pvt Ltd
2
irgendwie funktioniert das bei mir nicht (ver. 2.1.2). Auch mage / priceBox gibt mir einen Skriptfehler.
TrytoFly
1
Hat es jemand geschafft, es durch Mixin umzuschreiben?
Pol Ravalitera