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

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

例如

如果客户选择

价格为 20 美元的选项 A 将 20 美元添加到其价格中,我必须通过计算第二个下拉值和从第一个下拉列表中选择的价格来计算价格。

最佳答案

首先,让我试着重新表述你的问题:

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

示例产品:

  • 基本价格:$0
  • 尺寸 A:+$20
  • 颜色 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);
    

    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>
    

    关于magento-1.4 - 我想修改自定义选项百分比功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5990956/

    10-14 13:44