我发现Magento事件调度是一个非常令人沮丧的领域。我认为很多挫折感像往常一样,缺乏文档。
我希望我的代码能够在访问者浏览网站的各个阶段触发。所以我在Mage :: dispatchEvent中进行了一些调试,然后我浏览了网站以查看每个阶段触发的事件。有很多!
我感兴趣的两个地方是:
当访问者选择了帐单邮寄地址并进入结帐流程的下一阶段时。
当用户成功下订单时
对于帐单邮寄地址1,我看到被解雇的事件看起来相关:
controller_action_predispatch_checkout_onepage_saveBilling
controller_action_postdispatch_checkout_onepage_saveBilling
'pre'和'post'告诉我实际上有一个'checkout_onepage_saveBilling'事件,但是没有,所以我的第一个问题是为什么'pre'和'post'?
对于成功的订单,看起来不错的事件是:
checkout_onepage_controller_success_action
checkout_multishipping_controller_success_action
我的第二个问题是,所有付款方式会触发这些事件吗?例如,如果使用Google Checkout或PayPal(标准重定向),事件是否会触发,以及在什么时候?从PayPal返回网站时?如果是这样,那么如果用户在完成付款后没有返回该怎么回事。
感谢您的帮助。
答案 0 :(得分:15)
可悲的是,我注意到checkout_submit_all_after
没有触发Paypal Express订单。
如果没有修改Paypal模型来添加它(或者可能挂钩他们可能触发的事件 - 我还没有检查过),我认为checkout_onepage_controller_success_action
可能真的是你唯一可以信赖的事件对于每种类型的订单。
答案 1 :(得分:6)
在调用操作之前将触发predispatch事件,postdispatch事件将在操作完成后触发。因此,如果您需要知道操作的结果是什么,则应使用postdispatch事件。
对于成功订单,请检查checkout_submit_all_after事件。
如果您还没有看到它,https://www.nicksays.co.uk/magento-events-cheat-sheet-1-9/,是Magento事件的便捷参考。