Magento2: मैं कोर जेएस मॉड्यूल प्राइस-बॉक्स.जेड को कैसे ओवरराइड कर सकता हूं


15

मुझे विस्तार करने की आवश्यकता है Magento_Catalog/js/price-box.js। मैंने 'मिक्सिन्स' फीचर का इस्तेमाल किया है, लेकिन यह काम नहीं कर रहा है 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;
    };
});

योगेश, इस बारे में कुछ और जानकारी दीजिए।
कोड्रेन टेक्नोलॉब्स प्राइवेट लिमिटेड

जवाबों:


12
  1. अपने कस्टम मॉड्यूल requirejs-config.jsमें उसी नाम के साथ PriceBox js फ़ाइल निर्दिष्ट करें जिसके द्वारा पहले से ही कोर मॉड्यूल में घोषित किया गया है। हमारे मामले में यह priceBoxनीचे की तरह है। आपके मॉड्यूल requirejs-config.jsकुछ इस तरह होंगे

    var config = {
        map: {
             '*': {
                    priceBox:'namespace_modulename/js/custompricebox',
             }
        }
    };
  2. अब, custompricebox.jsऊपर दिए गए पथ पर फ़ाइल बनाएँ । मैं मान रहा हूं कि आप reloadPriceमूल्य-बॉक्स में विधि का विस्तार करना चाहते हैं । तो आपके custompricebox.jsनीचे की तरह होगा।

    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. कृपया ध्यान दें कि इस कोड का परीक्षण नहीं किया गया है। कुछ सिंटेक्स त्रुटियां हो सकती हैं। अगर आपको इस पर और मदद चाहिए तो मुझे बताएं।


हाय यज्ञेश, क्या हम इसे मिक्सिन के माध्यम से प्राप्त कर सकते हैं? इसे ओवरराइड करने के बजाय, क्या हम इसे बढ़ा सकते हैं?
प्रफुल्ल राजपूत

@PrafulRajput, मैं अभी तक मिक्सी का उपयोग नहीं करता, मैं एक बार ऐसा करने पर निश्चित रूप से आपको अपडेट कर दूंगा।
कोड्रेन टेक्नोलैब्स प्राइवेट लिमिटेड

2
किसी तरह यह मेरे लिए काम नहीं करता है (देखें। 2.1.2)। इसके अलावा mage / priceBox मुझे कुछ स्क्रिप्ट त्रुटि देता है।
TrytoFly

1
क्या मिक्सिन के माध्यम से किसी ने इसे फिर से लिखने में सफलता प्राप्त की?
पोल रावलतीरा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.