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



我对包含">percent"价格类型的自定义选项有一个真正的问题。

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

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

我找不到任何东西来处理这个大问题。

我确实找到并实现了这个答案,但Mage_Catalog_Model_Product_Type_Price -> _applyOptionsPrice中返回的$finalPrice没有正确评估自定义选项的基本价格+追加费用。此外,在前端,在Products.Options中,解决方案也没有在计算中包含基本价格。我假设修复是针对以前版本的magento(我在v1.11上)。

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

任何想法都将是最受欢迎的。

干杯


更新

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

以下是我在后端的内容(这不会改变任何行为。我会注意到,我刚刚将它们复制到应用程序/本地目录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;
}

最新更新