在本系列中,我’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:
总数是在配置XML中定义的,因此,如果您查看app / code / core / Mage / Sales / etc / config.xml,则可以’会发现以下内容:
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减少垃圾邮件。 了解如何处理您的评论数据.