嘿,我实施了自定义折扣系统,因为magento折扣系统不符合我的要求所以我试图在Mage_Sales_Model_Quote_Item
上申请折扣我已经阅读了一些,而且我&我#39;我发现以下功能setOriginalCustomPrice
,它适用于项目,如果用户更改数量,他将获得具有新数量的项目的折扣,所以我尝试在商品上使用不同的方法addOption
,仅在购物车页面上显示基于选项值中数量的计算
$item->addOption(array('code'=>'promo','value' => serialize(['amount'=>10,'qty'=>1])));
并在购物车页面
$promo = $item->getOptionByCode('promo');
echo '<div class="orig-price">'.$item->getOriginalPrice().'</div>';
echo '<div class="new-price">'.$item->getOriginalPrice() - ($promo['amount'] * $promo['qty']).'</div>';
问题在于它确实在产品上应用新价格,
所以我想自定义Mage_Sales_Model_Quote->collectTotals()
来显示我的折扣
并在订单完成时将其发送到管理员后端
我怎样才能实现这一目标? 提前谢谢
答案 0 :(得分:2)
我认为你的方法有一个根本性的缺陷。我不确定您在标准折扣中不喜欢什么,以及您可以通过目录或购物车规则实现什么,但您尝试做的事情肯定会破坏这些功能(和我的心一起。)
但是,如果您确定自己要做的事情,请不要自定义Mage_Sales_Model_Quote->collectTotals()
。
这个功能只是......好吧,它收集了所有总数:小计,运费,折扣等。看起来你只是在改变价格输出,但Magento本身并不知道任何关于它的信息。 因此,如果您想让Magento知道您正在更改商品价格,则必须添加自己的总数,或者更改现有总数中的一个。之后,Magento会做其他一切。由于您的更改后Magento输出已经计算的价格而不是原始价格,因此客户可能很难看到购物车中的原始价格和额外的折扣总额。所以看起来你必须改变总小计。
为此,您必须在扩展程序中重写Mage_Sales_Model_Quote_Address_Total_Subtotal
类,并在_initItem()
方法中插入计算。在原始文件的第111行附近,您将看到代码:
$item->setPrice($finalPrice)
->setBaseOriginalPrice($finalPrice);
这就是Magento为物品设定价格的地方,因此您可以在此之前插入计算并更改$finalPrice
。如果您有虚拟产品,则还必须更改collect()
方法。