0

製品ビューページでカスタムJSファイルを呼び出すMagento拡張機能を作成しています。このカスタムJSファイルは最後に読み込まれ、/ js / varien / product.jsの下部にあるformatPrice()関数をオーバーライドする必要があります。

元のformatPrice関数は次のとおりです。

formatPrice: function(price) {
return formatCurrency(price, this.priceFormat);
}

この関数を次のように置き換え/オーバーライドしたいと思います。

formatPrice: function(price) {
if (price % 1 == 0) { this.priceFormat.requiredPrecision = 0; }

return formatCurrency(price, this.priceFormat);
}

この関数を適切にオーバーライドするように、カスタムJSファイルにJSコードを書き込むにはどうすればよいですか?私はJSに精通していません。

4

2 に答える 2

2

それがグローバルであるwindow.formatPrice = myNewFormatPrice;場合、それがオブジェクトのメンバーである場合は、次のようにすることができます。anObject.formatPrice = myNewFormatPrice;

オブジェクトのプロトタイプを編集する必要がある場合は、次を使用します。Product.OptionsPrice.prototype.formatPrice = myFormatPrice;

また、へのアクセスを調べる必要がありますrequiredPrecision。「プライベート」または「保護」されている場合は、アクセスできません。

于 2013-01-22T17:39:04.410 に答える
0

@jhollomanの答えは機能的な観点からは正しいですが、代わりにその新しいクラスを継承しProduct.OptionsPriceて使用するという、プロトタイプの方法を検討することもできます。これは、36行目(変更が必要だと思います)からのものです。 app\design\frontend\base\default\template\catalog\product\view.phtml

オリジナル

<script type="text/javascript">
    var optionsPrice = new Product.OptionsPrice(<?php echo $this->getJsonConfig() ?>);
</script>

変更

<script type="text/javascript">
    var MyOptionPrice = Class.create(Product.OptionsPrice, { // inherit from Product.OptionsPrice
        formatPrice: function($super, price) { // $super references the original method (see link below)
            if (price % 1 === 0) { 
                this.priceFormat.requiredPrecision = 0; 
            }
            return $super(price);
        }        
    });
    var optionsPrice = new MyOptionPrice(<?php echo $this->getJsonConfig() ?>); // use yours instead
</script>

wrap()の使用(このように、元のメソッド名を変更する必要はありません):

<script type="text/javascript">
    Product.OptionsPrice.prototype.formatPrice = Product.OptionsPrice.prototype.formatPrice.wrap(function(parent, price) {
        if (price % 1 === 0) { 
            this.priceFormat.requiredPrecision = 0; 
        }
        return parent(price);        
    });
    var optionsPrice = new Product.OptionsPrice(<?php echo $this->getJsonConfig() ?>);
</script>

プロトタイプの継承と$ supervarについては、このリンクを参照してください。 繰り返しになりますが、Magentoで使用されている@jhollomanの提案に似たコードを見たので、彼のやり方で問題はありませんが、このプロトタイプのやり方を知りたいと思うかもしれません。

于 2013-01-22T21:44:59.353 に答える