magento自定义报价collectTotals以显示更新的总计

时间:2014-07-27 17:01:17

标签: php magento

嘿,我实施了自定义折扣系统,因为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()来显示我的折扣 并在订单完成时将其发送到管理员后端

我怎样才能实现这一目标? 提前谢谢

1 个答案:

答案 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()方法。