拆解Magento’s collectTotals:简介
拆解Magento’s collectTotals:简介

拆解Magento’s collectTotals:简介

2013年4月24日发布 in 发展历程
优雅的骆马和PayPal:共同构建PayPal信用卡令牌化扩展程序
2013年4月22日
拆解Magento’s collectTotals:核心过程
2013年5月1日

在本系列中,我’ll be explaining the process by which Magento handles calculating and displaying 总s 在 the cart (i.e., 小计, tax, discount, grand 总, etc), and how to customize this process for your own purposes.

从本质上讲,在在线购物车中处理产品价格和总计似乎很简单。将购物车数量乘以产品价格。添加运输。加税。那里有。您第一次有理由修改Magento中购物车总计的计算和显示方式,但是,’会发现除了简单以外,什么都没有。实际上,您的第一个冲动可能是跑得很远很远。

为什么复杂?好吧,第一个也是最明显的原因是,即使是简单的总计计算也不会’t看起来很简单。是按百分比还是统一费率发货?航运是否要征税,我们从哪里获得适用于客户的税率信息?我们应用哪种折扣?可应用的折扣数量是否有限制?

和Magento’强大的功能集还带来了很多其他因素:特价,等级价格,购物车价格规则,优惠券代码,礼品卡。 。 。构建一个稳定的系统以使所有这些因素发挥作用,并为定制留有余地,这并非易事。 Magento’的总计收集技术使计算可以很好地细分为自己的模块,并且’旨在帮助您保持理智,而不是失去理智,一旦您了解流程的工作原理。

深入研究负责将产品添加到购物车的代码,’会发现一些奇特的东西:在直接执行Mage_Sales_Model_Quote :: addProduct的任何时候,报价都是在代表购物车中产品的报价项目上设置的价格。那’的原因是,由于上述所有原因,商品的最终价格可以’除了在有关购物车的其他信息的上下文中,将确定其他内容。因此,每个项目的计算’的价格以及有关购物车的所有其他价格信息,都是一次性完成的,采用一种方法’在购物车更新和结帐流程的各个点保存报价之前调用:Mage_Sales_Model_Quote :: collectTotals。

要了解那里发生了什么,让’备份看看“total” is defined. What I’ll call a “total” or “total collector” is a particular pricing calculation that must be done 上 the cart (subtotal, tax, discount, grand 总), and it has a model dedicated to two main jobs:

  • 计算和更改有关报价,报价地址和报价项目的适当信息
  • Dictating how the specific 总 should be displayed 在 the cart (or check out, etc), if at all

总数是在配置XML中定义的,因此,如果您查看app / code / core / Mage / Sales / etc / config.xml,则可以’会发现以下内容:

XHTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<global>
。 。 。
    <sales>
        <quote>
            <totals>
                <nominal>
                    <class>销售/ 引用_address_total_nominal</class>
                    <before>小计</before>
                </nominal>
                <subtotal>
                    <class>销售/ 引用_address_total_小计</class>
                    <after>名义上的</after>
                    <before>累计</before>
                </subtotal>
                . . .
            </totals>
        </quote>
    . . .
    </sales>
。 。 。
</global>

在这里,我们看到定义了多个基本总计以及驱动它们的模型。你可以看到“before” and “after”节点还指示应以什么顺序运行总计计算。浏览其他核心模块(例如Mage_SalesRule和Mage_Tax)的配置文件,然后’请参阅其他已定义的总计。

了解总计收集过程对于不同程度的定制很有价值。显而易见的应用是,如果您需要创建自己的新的总收集器,并且’重要的是要理解,这不必仅用于要存储和显示的不同总数。您可能希望实现总体收集器,只是为了在收集过程中修改其他计算的结果。或者,您的自定义设置可能不会那么麻烦,只需观察一下“sales_quote_collect_totals_before”在流程运行之前修改数据的事件,在这种情况下’知道如何处理这些数据的关键。

在下一个条目中,我们’ll take a more 在-depth look 在to the config, models, and logic 在volved with 总s collection.

下一页条目

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.

最近的帖子查看全部
2020年10月22日
通过 阿什莉·科利弗 商业见解, 优雅的骆马 2020年10月22日
毫无疑问,2020年是历史性的一年。火灾,全球大流行,暴动,老虎王等’只是冰山一角。如 […]