【问题标题】:magento customize quote collectTotals to show the updated totalsmagento 自定义报价 collectTotals 以显示更新的总数
【发布时间】:2014-07-27 17:01:17
【问题描述】:

嘿,我正在实施一个自定义折扣系统,因为 magento 折扣系统不符合我的要求,所以我正在尝试对 Mage_Sales_Model_Quote_Item 应用折扣我已经阅读了一些,我发现了以下功能 @987654322 @问题是它适用于商品,如果用户更改数量,他将获得新数量的商品折扣,所以我尝试在商品上使用不同的方法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-&gt;collectTotals() 来显示我的折扣 订单完成后发送到后台管理

我怎样才能做到这一点? 提前谢谢

【问题讨论】:

    标签: php magento


    【解决方案1】:

    我认为您的方法存在根本缺陷。我不确定您不喜欢标准折扣中的哪些内容,以及使用目录或购物车规则无法实现的内容,但您尝试做的事情肯定会破坏这些功能(连同我的心)。

    但是,如果您确定要执行的操作,请不要自定义 Mage_Sales_Model_Quote-&gt;collectTotals()

    这个函数只是......好吧,它收集所有总计:小计、运输、折扣等。看起来你只更改价格输出,但 Magento 本身对此一无所知。 因此,如果您想让 Magento 知道您正在更改商品价格,您必须添加自己的总计,或更改现有总计之一。之后,Magento 将做其他所有事情。由于在您更改后 Magento 输出已经计算的价格而不是原始价格,因此客户看到购物车中的原始价格和额外的折扣总额可能会很奇怪。所以看起来您将不得不更改小计。

    为此,您必须在扩展中重写 Mage_Sales_Model_Quote_Address_Total_Subtotal 类,并将计算插入到 _initItem() 方法中。在原始文件的第 111 行附近,您将看到代码:

    $item->setPrice($finalPrice)
         ->setBaseOriginalPrice($finalPrice);
    

    这是 Magento 为商品设置价格的地方,因此您可以在此之前插入您的计算并更改 $finalPrice。如果您有虚拟产品,您也必须更改collect() 方法。

    【讨论】:

    • 与心同行,哈哈哈。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多