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

标签 javascript php magento

我在使用包含“百分比”价格类型的自定义选项时遇到了一个真正的问题。

在 Simple 产品上,基于百分比的自定义选项按预期工作,但在 Configurable 或 Bundled 上,最终价格由基本价格决定,而不是基本价格 + 附加选项(这是业务要求规定的):

Config/Bundle Product

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

我没能找到很多解决这个大问题的方法。

我确实找到并实现了 this Answer ,但 Mage_Catalog_Model_Product_Type_Price -> _applyOptionsPrice 中返回的 $finalPrice 未正确评估自定义选项的基本价格 + 附加费。此外,在前端,在 Products.Options 中,解决方案也没有将基本价格纳入计算。我假设修复程序适用于以前版本的 magento(我使用的是 v1.11)。

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

欢迎提出任何想法。

干杯


更新

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

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

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 分给可以帮助我解决这个问题的人。 ...

有人吗?

最佳答案

如果我没看错,您需要可配置和分组的产品,每个下一次期权价格修改都应应用于该值,该值是根据之前的值计算的(在应用上一次期权价格修改之后)。在这种情况下,您应该以下一种方式覆盖 Mage_Catalog_Model_Product_Type_Configurable_PriceMage_Catalog_Model_Product_Type_Grouped_Price 类中的 _applyOptionsPrice() 方法:

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;
}

关于javascript - 自定义产品选项 - 修改基于百分比的定价逻辑 : Magento,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12572531/

相关文章:

php - Magento:监控所有 cron 作业的执行时间?

javascript - jQuery 1.7+ on(click..) 不适用于动态添加的 <li>

javascript - 同源策略不允许读取远程资源

java - 更好地理解从 Mysql 到 Android 的 Base64

php - mysql select query pattern, get duplicates just once , regex, 模式

Magento:如何在结帐页面更改送货方式标题?

javascript - webpack中的多个动态入口脚本?

javascript - 使用ajax设置PHP session 变量

php - 无法使用 jquery mobile 在新选项卡中打开链接

Magento 重新索引错误 "Category Products"