购物车规则不再有效时,是否存在事件或插件位置?


13

当购物车价格规则不再有效时(例如,当它过期或您更改不再适用的其他产品的数量时),是否可以插入某个事件或地点?我知道它会自动从购物车中删除,但是我似乎无法在代码中找到发生这种情况的地方。

我正在编写一个模块,该模块将购物车中的免费产品添加到小计超过X金额的优惠券中。除了减少小计中X之下的购物车中的物品数量时,其他所有操作都有效。正在删除优惠券,但我的产品仍留在购物车中。

到目前为止,我已经利用以下事件来做到目前为止我需要做的事情...

salesrule_validator_process
checkout_cart_update_items_after
sales_quote_collect_totals_before

我确实发现了Magento\Quote\Model\CouponManagement一个看起来很有希望的东西,因为它具有set()remove()方法,但是在更新购物车时似乎没有被调用。

checkout_cart_update_items_after看来,这似乎是我可以检查的合乎逻辑的地方,但看来规则仍然是根据$cart->getQuote()->getAppliedRuleIds()


更新:我最终为checkout_cart_save_after事件添加了一个观察者,该事件在此之后运行,collectTotals()因此知道规则是否仍在购物车中。然后,我基本上$quote->getAppliedRuleIds()$quote->getOrigData('applied_rule_ids')进行比较,看看规则是否已删除。我觉得有一种更好的方法可以执行此操作,但是暂时可以。我仍然有优惠券过期的问题...


您能简单解释一下吗,它非常复杂
Anas Mansuri

Answers:


0

我会用一个围绕插件

\ Magento \ SalesRule \ Model \ RulesApplier :: applyRules

那里有$ rules参数,它是一个包含旧的应用规则ID的数组,而$ proceed()调用的结果将是一个应用ID的数组。如果您透露自己打算怎么做,也许可以找到一个更好的地方。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.