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

时间:2011-05-13 11:04:29

标签: magento-1.4 magento

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

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

例如

如果客户选择

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

3 个答案:

答案 0 :(得分:5)

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

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

示例产品:

  1. 基本价格:$ 0
  2. 尺寸A:+ $ 20
  3. 颜色X:+ 10%
  4. 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);
    

    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');
    

    现在修改template/catalog/product/view/options.phtml中的Javascript以累积计算即时百分比。在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>
    

答案 1 :(得分:1)

我不清楚您的问题,我认为您需要可配置的产品选项...

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

,示例输出如下

sample configurable product

答案 2 :(得分:1)

使用Magento更新,_applyOptionsPrice中修改的行已更新:

来自: $ finalPrice + = $ group-&gt; getOptionPrice($ quoteItemOption-&gt; getValue(),$ finalPrice);

到: $ finalPrice + = $ group-&gt; getOptionPrice($ confItemOption-&gt; getValue(),$ finalPrice);