Answers:
/app/code/core/Mage/Sales/Model/Quote.php
是quote对象的Quote类
/app/code/core/Mage/Sales/Model/Quote/Address.php
是任何报价地址对象的报价地址类
报价对象通常包含2个地址对象,但是如果存在多个传递地址,则可以包含更多地址对象。
关于“汇总”方法:首先让我们了解每种方法及其目的:
中的方法Mage_Sales_Model_Quote
是Totals 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:在每个地址对象运行潜在收集器对象列表之前,在报价地址对象内触发。
不知道您的最终游戏,我将无法确定哪个游戏最适合您,但是,我也建议您考虑两者是否不合适,并且最适合为该游戏添加新的收藏家。总量收集器系统
我希望这些信息可以帮助您确定扩展功能并提供稳定解决方案的正确方法。