【问题标题】:Magento Order in which modules affect a quoteMagento 模块影响报价的顺序
【发布时间】:2012-09-29 00:31:45
【问题描述】:

我有一个模块(不是我创建的),如果满足某些条件,它会获取报价并应用折扣。这本身就可以正常工作。购物车规则本身也可以正常工作。

但是,在应用内置 Magento 购物车(总价)规则之前,我需要自定义模块应用相关折扣。就目前而言,Magento 首先应用,然后是自定义的,导致 Magento 折扣在不应该存在的时候。

什么控制模块的顺序,因此我将如何指定不同的顺序。

【问题讨论】:

    标签: magento checkout cart


    【解决方案1】:

    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 对象可能不包含小计..跨度>
    • 这很奇怪;进行了您建议的更改,但现在在添加到购物车或访问非空购物车时出现 500 错误(php 致命错误内存已耗尽)。我是否可以提供任何其他信息来帮助确定它。也感谢您的回答,非常感谢。
    • 可能观察者中的逻辑需要一些在sales_quote_collect_totals_before事件被调度时不可用的信息。现在我没有想法,如果您发布您正在使用的模块的config.xml 文件,这将很有帮助,但我不确定它是否有帮助,您需要使用一些调试工具
    • Slayer,原来那个折扣模块没有使用正常的magento促销系统,而是自己定义的;因此,订单不会解决它。但是没有理由认为您的解决方案对于我似乎描述的情况不正确,因此是正确的答案。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-30
    • 2011-06-04
    • 1970-01-01
    • 2012-02-24
    相关资源
    最近更新 更多