我在使用包含“百分比”价格类型的自定义选项时遇到了一个真正的问题。
在 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_Price
和 Mage_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/