【发布时间】:2012-09-29 00:31:45
【问题描述】:
我有一个模块(不是我创建的),如果满足某些条件,它会获取报价并应用折扣。这本身就可以正常工作。购物车规则本身也可以正常工作。
但是,在应用内置 Magento 购物车(总价)规则之前,我需要自定义模块应用相关折扣。就目前而言,Magento 首先应用,然后是自定义的,导致 Magento 折扣在不应该存在的时候。
什么控制模块的顺序,因此我将如何指定不同的顺序。
【问题讨论】:
我有一个模块(不是我创建的),如果满足某些条件,它会获取报价并应用折扣。这本身就可以正常工作。购物车规则本身也可以正常工作。
但是,在应用内置 Magento 购物车(总价)规则之前,我需要自定义模块应用相关折扣。就目前而言,Magento 首先应用,然后是自定义的,导致 Magento 折扣在不应该存在的时候。
什么控制模块的顺序,因此我将如何指定不同的顺序。
【问题讨论】:
Magento 具有collectTotals 功能(我相信这是复合模式的实现)。它的基本作用是按顺序处理每个指定的Totals Collectors,并将其称为collect() 方法。
您的模块的总收集器很可能在 SalesRule 之后调用(代码为 discount)。所以你需要做的是:打开自定义折扣模块的config.xml配置文件,找到xpath config/global/sales/quote/totals/[模块别名]并添加(或更改如果存在)指令<before>discount</before>
通过这种方式,您可以订购自定义模块的总收集器,以便在SalesRule 之前应用折扣。
【讨论】:
before 指令,所以我在class 下添加了一个,但不幸的是,它似乎没有任何效果。还有一个<events><sales_quote_save_before><observers>,完全不确定这是否相关。
<sales_quote_save_before> 更改为<sales_quote_collect_totals_before> - 因此自定义模块逻辑将在collectTotals 进程之前应用,但您的 Quote 对象可能不包含小计..跨度>
sales_quote_collect_totals_before事件被调度时不可用的信息。现在我没有想法,如果您发布您正在使用的模块的config.xml 文件,这将很有帮助,但我不确定它是否有帮助,您需要使用一些调试工具