Magento2 : 핵심 js 모듈 price-box.js를 재정의하는 방법


15

연장해야합니다 Magento_Catalog/js/price-box.js. 'mixins'기능을 사용했지만 작동하지 않습니다 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, 이것에 대해 더 많은 정보를 제공하십시오.
Codrain Technolabs Pvt Ltd

답변:


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. 이 코드는 테스트되지 않았습니다. 일부 syntex 오류가있을 수 있습니다. 도움이 더 필요하면 알려주십시오.


안녕하세요 Yagnesh, Mixin을 통해 달성 할 수 있습니까? 그것을 재정의하는 대신 확장 할 수 있습니까?
Praful Rajput

@PrafulRajput, 나는 아직 mixin을 사용하지 않습니다.
Codrain Technolabs Pvt Ltd

2
어떻게 든 이것은 나를 위해 작동하지 않습니다 (ver. 2.1.2). 또한 mage / priceBox는 스크립트 오류를 ​​발생시킵니다.
TrytoFly

1
누군가 Mixin을 통해 그것을 성공적으로 다시 작성 했습니까?
Pol Ravalitera
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.