我想要修改自定义选项百分比功能

问题描述:

我想要实现这样的功能,如果我们有一个自定义选项价格值10,其价格类型是百分比,其基本价格是0我该如何实现它。我想要修改自定义选项百分比功能

我从我的第一个客户要首先选择的尺寸,并加入价格根据大小,当客户选择从颜色的颜色下拉那么百分比值应该从第一个下拉值来计算选择

例如

如果客户端选择

一个选项A和价格:$ 20 $ 20被添加到它的价格和我具有由calculatiog的seond下拉值,并与来自第一选择dropdowm价格来计算价格。

我并不清楚你的问题,我认为ü需要配置的产品选项...

请参见本教程http://www.magentocommerce.com/knowledge-base/entry/tutorial-creating-a-configurable-product/

和样本输出会像下面

sample configurable product

首先,让我试着重新修改您的问题:

在每个自定义选项ste p,您如何根据前面步骤的价格计算百分比,而不是基于产品基准价格?换句话说,你如何让Magento累计自定义期权价格而不是总结它们?

实施例产物:

  1. 基本价格:$ 0
  2. 尺寸A:+ $ 20
  3. 颜色X:+ 10%

Magento的计算:基价0的10%= 0.总价20.

预期计算:基准价格的10%和尺寸价格= 20%的10%总价22.

解决方案

要做到这一点,你必须重写Magento的自定义期权定价逻辑。必须在价格模型(用于服务器端计算)以及块和模板代码(用于客户端Javascript计算)中进行更改。

在价格模型Mage_Catalog_Model_Product_Type_Price,在功能_applyOptionsPrice更改计算:

//$finalPrice += $group->getOptionPrice($quoteItemOption->getValue(), $basePrice); 
$finalPrice += $group->getOptionPrice($quoteItemOption->getValue(), $finalPrice); 

Mage_Catalog_Block_Product_View_Options,功能getJsonConfig计算其返回到模板前的基本价格的百分比。更改为获取返回到模板的实际百分比值:

//$_tmpPriceValues[$value->getId()] = Mage::helper('core')->currency($value->getPrice(true), false, false); 
// Add fixed price or percentage (don't calculate percentage yet, done by JS live instead) 
$_tmpPriceValues[$value->getId()]['pricing_value'] = ($value->getPriceType() != 'percent') ? Mage::helper('core')->currency($value->getPrice(true), false, false) : $value->getPrice(); 
$_tmpPriceValues[$value->getId()]['is_percentage'] = ($value->getPriceType() == 'percent'); 

现在修改JavaScript中template/catalog/product/view/options.phtml来计算即时的百分比,累计。在JavaScript Product.Options课程,新增功能进行计算:

getPriceToAdd : function(optionvalue, oldprice) { 
    var value = parseFloat(optionvalue['pricing_value']); 
    if (optionvalue['is_percentage']) { 
     return Math.round(value*oldprice)/100; 
    } else { 
     return value; 
    } 
} 

,改变reloadPrice功能,使用新的计算方法:

//price += parseFloat(config[optionId][element.getValue()]); 
price += opConfig.getPriceToAdd(config[optionId][element.getValue()], price); 
... 
//price += parseFloat(this.config[optionId]); 
price += opConfig.getPriceToAdd(this.config[optionId], price); 
... 
//price += parseFloat(this.config[optionId][selectOption.value]); 
price += opConfig.getPriceToAdd(this.config[optionId][selectOption.value], price); 
... 
//price += parseFloat(this.config[optionId]); 
price += opConfig.getPriceToAdd(this.config[optionId], price); 

像往常一样,不直接编辑核心文件。使用本地重写。

<config> 
    <global> 
    <catalog> 
     <product> 
     <type> 
      <simple> 
      <price_model>mymodule/product_type_simple_price</price_model> 
      </simple> 
      ... 
     </type> 
     </product> 
    </catalog> 
    </global> 
</config> 

随着Magento的更新,该行于_applyOptionsPrice修改已更新:

来自: $ finalPrice +请注意,您的新的价格模式,必须在每个相关产品类型的配置声明= $ group-> getOptionPrice($ quoteItemOption-> getValue(),$ finalPrice);

: $ finalPrice + = $ group-> getOptionPrice($ confItemOption-> getValue(),$ finalPrice);