自定义产品选项 - 修改基于百分比的定价逻辑:Magento

时间:2012-09-24 20:37:08

标签: php javascript magento options

我的自定义选项存在真正的问题,其中包含“百分比”价格类型。

在简单产品上,基于百分比的自定义选项按预期工作,但在可配置或捆绑上,最终价格由基本价格确定,而不是基本价格+其他选项(这是商业要求所规定的):< / p>

Config/Bundle Product

base price = $1000
option 1 + $100 
option 2 + 5%
_____________________________
= $1150 (instead of $1155);

我无法找到任何处理这个大问题的事情。

我确实找到并实施了this Answer,但$finalPrice中返回的Mage_Catalog_Model_Product_Type_Price -> _applyOptionsPrice未正确评估自定义选项的基本价格+上涨费用。此外,在前端,在Products.Options中,解决方案也未在计算中纳入基本价格。我假设修复是针对magento的先前版本(我在v1.11)。

我怀疑修复的策略是正确的,但它是一个非常复杂的交换,我不完全清楚需要改变什么来处理这个问题。

任何想法都会受到欢迎。

干杯

<小时/> 的更新

我在前端取得了一些成功(让javascript更新选项值并正确定价)。然而,这些变化并未写入价格模型。例如,当购物车进行渲染时,最终价格不包含满载价格,而是包含父产品的百分比:

这就是我在后端的内容(这并没有改变任何行为。我会注意到我刚刚将它们复制到app / local目录下,但是一旦我得到它,我会正确地覆盖它们逻辑解决了。

Mage_Catalog_Model_Product_Type_Price

    public function getFinalPrice($qty=null, $product)
    {
        //... aggregate tier and special pricing, then apply custom options

        $finalPrice = $product->getData('final_price');
        $finalPrice = $this->_applyOptionsPrice($product, $qty, $finalPrice);

        return max(0, $finalPrice);
    }

    protected function _applyOptionsPrice($product, $qty, $finalPrice)
    {
        if ($optionIds = $product->getCustomOption('option_ids')) {
            $basePrice = $finalPrice;
            foreach (explode(',', $optionIds->getValue()) as $optionId) {
                if ($option = $product->getOptionById($optionId)) {

                    $confItemOption = $product->getCustomOption('option_'.$option->getId());
                    $group = $option->groupFactory($option->getType())
                        ->setOption($option)
                        ->setConfigurationItemOption($confItemOption);
                    // grab option value based on finalprice 
                    $finalPrice += $group->getOptionPrice($confItemOption->getValue(), $finalPrice);
                }
            };
        }

        Mage::log('base price :'.$basePrice.'  final price :'.$finalPrice); 

        return $finalPrice;
    }

据我所知,在 Mage_Catalog_Model_Product_Type_Configurable_Price 中, Mage_Catalog_Model_Product_Type_Grouped_Price ,没有可覆盖的内容,因为他们每个人都会调用Parent::getFinalPrice来确定每一步的值......

问题仍然存在 - 如何修改定价模式以适应基于百分比的自定义选项?

50分可以帮助我解决这个问题的人。 ......

任何?

1 个答案:

答案 0 :(得分:0)

如果我说得对,那么您需要可配置和分组的产品,每个下一个选项价格修改都应该应用于之前计算的值(在应用之前的选项价格修改之后)。在这种情况下,您应该以下一种方式覆盖_applyOptionsPrice()Mage_Catalog_Model_Product_Type_Configurable_Price类中的Mage_Catalog_Model_Product_Type_Grouped_Price方法:

protected function _applyOptionsPrice($product, $qty, $finalPrice)
{
    if ($optionIds = $product->getCustomOption('option_ids')) {
        foreach (explode(',', $optionIds->getValue()) as $optionId) {
            if ($option = $product->getOptionById($optionId)) {
                $confItemOption = $product->getCustomOption('option_'.$option->getId());

                $group = $option->groupFactory($option->getType())
                    ->setOption($option)
                    ->setConfigurationItemOption($confItemOption);
                $finalPrice += $group->getOptionPrice($confItemOption->getValue(), $finalPrice);
            }
        }
    }

    return $finalPrice;
}