@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の提案に似たコードを見たので、彼のやり方で問題はありませんが、このプロトタイプのやり方を知りたいと思うかもしれません。