销售报价与销售报价地址之间的差异


8

我正在寻找可以使用的collect_totals观察者。有两个观察者, sales_quote_collect_totals_beforesales_quote_address_collect_totals_before

它们可以在/app/code/core/Mage/Sales/Model/Quote.php和中找到/app/code/core/Mage/Sales/Model/Quote/Address.php

我不知道这两个文件有什么区别,因为两个文件都具有collect total功能?

Answers:


14

/app/code/core/Mage/Sales/Model/Quote.php

是quote对象的Quote类

/app/code/core/Mage/Sales/Model/Quote/Address.php

是任何报价地址对象的报价地址类

报价对象通常包含2个地址对象,但是如果存在多个传递地址,则可以包含更多地址对象。

关于“汇总”方法:首先让我们了解每种方法及其目的:

中的方法Mage_Sales_Model_QuoteTotals Collector子系统的初始入口点,由购物车保存启动,

(这允许您将类方法注入到购物车计算中,以影响购物车总计的结果-例如:购物车折扣的计算)

代码流如下:

Mage_Checkout_Model_Cart::save()

Mage_Sales_Model_Quote::collectTotals() <-收集器子系统的入口点

Mage_Sales_Model_Quote_Address::collectTotals() <-通过引用收集总计对象中的循环调用附加到引用对象的每个地址。

现在,在address collecttotals方法中,使用所有系统定义的“ collectors”执行循环,调用每个类/方法,从而允许通过其他计算来调整订单的总数(请记住,所有总数都与地址无关)对象,而不是实际的报价对象,这允许magento对多个地址执行结帐)

foreach ($this->getTotalCollector()->getCollectors() as $model) {
            $model->collect($this);
} 

可能的“收藏家”列表如下:

在此处输入图片说明

您可以通过模块配置本身注入自己的总计收集器,并且必须具有collect方法作为入口点。

<sales>
   <quote>
      <totals>
         <giftpromo>
           <class>giftpromo/promo_gift</class>
           <after>discount</after>
           <before>tax,grand_total</before>
           <sort_order>12410</sort_order>
         </giftpromo>
      </totals>
    </quote>
</sales>

现在,考虑所有这些信息,并触发事件:

sales_quote_collect_totals_before:在加载任何地址对象和操作总计收集器之前被触发

sales_quote_address_collect_totals_before:在每个地址对象运行潜在收集器对象列表之前,在报价地址对象内触发。

不知道您的最终游戏,我将无法确定哪个游戏最适合您,但是,我也建议您考虑两者是否不合适,并且最适合为该游戏添加新的收藏家。总量收集器系统

我希望这些信息可以帮助您确定扩展功能并提供稳定解决方案的正确方法。


超级解释!
David Manners 2015年

我读了第一行,已经决定+1。
pspahn

@ProxiBlue阅读您的答案后,我相信您可以帮助我解决与collectTotals()方法有关的一个问题。因此,我的“产品”表中有两个折扣属性,用于对订单放置中的产品应用折扣。因此,当我们创建报价时,可以在报价表中添加这些折扣和after_discount数量,这很好。现在,当我下订单时,我在$ quote-> collectTotals()-> save()行看到折扣值变为0,总金额变为原始价格(没有折扣价)。请告诉您如何解决此问题。
apandey846 '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.