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

Ali*_*lah 4 magento magento-1.4

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

我想首先从我的第一个客户选择尺寸和价格根据尺寸添加当客户从颜色下拉选择颜色然后百分比值应从第一个下拉值选择计算

例如

如果客户选择

价格为20美元的期权A 20美元加到其价格中,我必须通过计算下跌价值和从第一次下拉中选择的价格来计算价格.

小智 5

首先,让我试着改写你的问题:

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

示例产品:

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

Magento的计算:基本价格的10%0 = 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);
Run Code Online (Sandbox Code Playgroud)

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');
Run Code Online (Sandbox Code Playgroud)

现在修改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;
    }
}
Run Code Online (Sandbox Code Playgroud)

并更改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);
Run Code Online (Sandbox Code Playgroud)

像往常一样,不要直接编辑核心文件.使用本地重写.请注意,您的新价格模型必须在每个相关产品类型的配置中声明:

<config>
  <global>
    <catalog>
      <product>
        <type>
          <simple>
            <price_model>mymodule/product_type_simple_price</price_model>
          </simple>
          ...
        </type>
      </product>
    </catalog>
  </global>
</config>
Run Code Online (Sandbox Code Playgroud)