我正在使用Magento 1.5.1.0和“mPAY24支付网关”扩展。 我有一个Observer类用于事件“sales_order_payment_pay”发送通知 电子邮件发送给物品的制造商。
这个解决方案有一些奇怪的行为:
有没有办法防止观察者方法被执行两次?
亲切的问候, 贝尔蒂
答案 0 :(得分:1)
没有。作为客户(与系统)开发人员,您无法确定事件何时触发。
以下是解决此问题的一些常规起点:
相反,您需要更改观察者方法的行为。您不需要在观察者方法中盲目地触发电子邮件,而是需要检查系统状态和/或$observer->getData()
数组中的对象,并确定事件是否在付款交易后被触发,或者如果在单击“单击返回按钮”后被触发。
如果是前者,请按预期发送电子邮件。如果它是后者,只需来自观察者方法的return
和/或使用条件跳过电子邮件。
如果这不是你自己的观察者方法,那就是问题(它是核心观察者或观察者是模块的一部分),使用类重写来用你自己的方法替换观察者方法。如果检测到正确的状态,请调用return parent::observerMethodName
,如果是“单击返回按钮”状态,则返回null并跳过调用父项。
如果观察者设置了硬编码的类名(不是类别名),那么您将需要使用代码池覆盖来更改方法的行为。