用Magento可配置产品选项中的实际价格替换价格差异

时间:2011-06-03 09:07:41

标签: magento options product configurable

我有一个可配置的产品,有3个选项,见下文:

enter image description here

我想用产品的实际价格替换+ 24.00英镑和+ 75.00英镑。

相反它会说:£69.00和£120.00

我找到的代码位于 js / varien / product.js

我花了一些时间来切换和更改代码,但无法完全解读需要更改的内容。此文件中的第240行向下处理可配置产品的JavaScript事件。

我很感激这里有任何帮助。

8 个答案:

答案 0 :(得分:21)

这是通过javascript执行的。你需要修改js / varien / configurable.js中的方法getOptionLabel(这是Magento 1.5.1.0,你的milage可能因你使用的版本而异)。

此方法接收要应用的选项和价格差异。如果您只想显示不同选项的绝对价格,您需要自己计算它们,使用可配置产品的绝对基值和选项的绝对差值。

该方法的前几行如下所示:

getOptionLabel: function(option, price){
    var price = parseFloat(price);

更改,以便获得绝对基本价格和期权的绝对差异。然后将它们加在一起以获得该选项的最终绝对价格。像这样:

getOptionLabel: function(option, price){
    var basePrice = parseFloat(this.config.basePrice);
    // 'price' as passed is the RELATIVE DIFFERENCE. We won't use it.
    //  The ABSOLUTE DIFFERENCE is in option.price (and option.oldPrice)
    var absoluteDifference = parseFloat(option.price);
    var absoluteFinalPrice = basePrice + absoluteDifference;
    // var price = parseFloat(price);
    var price = absoluteFinalPrice;

然后你需要摆脱选项中的+和 - 符号。稍后在同一方法中,当您调用this.formatPrice时,只需在每次调用中将第二个参数更改为false。

    if(price){
        if (this.taxConfig.showBothPrices) {
            str+= ' ' + this.formatPrice(excl, false) + ' (' + this.formatPrice(price, false) + ' ' + this.taxConfig.inclTaxTitle + ')';
        } else {
            str+= ' ' + this.formatPrice(price, false);
        }  

关于此的更多说明:

您将在js / varien / product.js中找到另一个名为Product.Config的相同对象。据我所知,这绝对没有,因为它被js / varien / configurable.js取代。

另外,如果只更改js / varien / configurable.js,下次升级Magento时可能会丢失更改。最好创建另一个文件,如js / varien / my_configurable.js或其他任何文件,并在配置文件(product.xml)中调用它以获取您正在使用的任何主题。

答案 1 :(得分:4)

这个扩展可能会有所帮助,我过去曾经使用过它(它似乎得到维护):

http://www.magentocommerce.com/magento-connect/Matt+Dean/extension/596/simple-configurable-products

答案 2 :(得分:4)

在magento 1.9中,.js方法似乎不再起作用了。

相反,我更新了Abstract.php(/app/code/core/Mage/Catalog/Block/Product/View/Options/Abstract.php),将此文件复制到/ app / code / local / Mage / Catalog / Block /Product/View/Options/Abstract.php。在第128行,将$ _priceInclTax和$ _priceExclTax变量更改为以下内容:

$_priceInclTax = $this->getPrice($sign.$value['pricing_value'], true)+$this->getProduct()->getFinalPrice();

$_priceExclTax = $this->getPrice($sign.$value['pricing_value'])+$this->getProduct()->getFinalPrice();

我见过类似的解决方案,但这是确保它也适用于负面产品选项和特价折扣等事情的唯一方法。

答案 3 :(得分:1)

找到一个适用于Magento 1.9的解决方案here,但它会覆盖核心代码,应该这样做,以便它不会覆盖核心。

我在一个新的js文件中尝试过类似的东西,但不知何故核心configurable.js搞砸了,也许有人可以提出一种方法,以便id不会。

Product.Config.prototype.getOptionLabel  = Product.Config.prototype.getOptionLabel.wrap(function(parentMethod){
// BEGIN:: custom price display update
var basePrice = parseFloat(this.config.basePrice);
// 'price' as passed is the RELATIVE DIFFERENCE. We won't use it.
//  The ABSOLUTE DIFFERENCE is in option.price (and option.oldPrice)
var absoluteDifference = parseFloat(option.price);
// var price = parseFloat(price);
if(absoluteDifference){
    // console.log(option);
    price = basePrice + absoluteDifference;
} else {
    price = absoluteDifference;
}
// END:: custom price display update

if (this.taxConfig.includeTax) {
    var tax = price / (100 + this.taxConfig.defaultTax) * this.taxConfig.defaultTax;
    var excl = price - tax;
    var incl = excl*(1+(this.taxConfig.currentTax/100));
} else {
    var tax = price * (this.taxConfig.currentTax / 100);
    var excl = price;
    var incl = excl + tax;
}

if (this.taxConfig.showIncludeTax || this.taxConfig.showBothPrices) {
    price = incl;
} else {
    price = excl;
}

var str = option.label;
if(price){
    if (this.taxConfig.showBothPrices) {
        // BEGIN:: custom price display update
        // NOTE:: 'true' was changed to 'false' in 3 places.
        str+= ' ' + this.formatPrice(excl, false) + ' (' + this.formatPrice(price, false) + ' ' + this.taxConfig.inclTaxTitle + ')';
    } else {
        str+= ' ' + this.formatPrice(price, false);
        // END:: custom price display update
    }
}
return str;

});

答案 4 :(得分:0)

修改文件js/varien/product.js,查看行号691

如果我们要从产品详细信息页面更改属性价格,触发器将在此处触发。只需查看alert(price);,即可获得可更改的价格。

答案 5 :(得分:0)

在1.7(不确定何时改变)事情发生了变化。最终,当从Mage / Catalog / Block / Product / View / Options / Type / Select调用时,在_formatPrice函数中的Mage / Catalog / Block / Product / View / Options / Abstract.php内部构建价格字符串.PHP

请注意,更改这两个类中的任何一个都会引起网站的更改,而不仅仅是在特定的组合中

答案 6 :(得分:0)

我很惊讶Magento默认使用这种奇怪的逻辑。

应该可以看到每种变体的不同价格,甚至可能是默认价格。

Prestashop执行此操作,甚至在选择每个变体时自动切换图像!

答案 7 :(得分:0)

在Magento 1.9中 打开js / varien / configurable.js 转到函数getOptionLabel

根据需要修改此功能代码。