比如要在place order时执行自己附加的操作(如MaxMind提供的minFraud 检测),我总是不太希望覆盖Order的place方法。Magento提供了Event机制优雅地处理这样的事情。
就以上面提到的minFraud检测(http://www.maxmind.com/app/ccv),我希望在Place Order完成后执行检测并将结果存储。
首先Magento在Order的place方法里抛出了名字为sales_order_place_after的事件,所以可以捕获这个事件Hook自己附加的代码。
1. 在etc/config.xml中增加如下标签
<config> <global> <events> <sales_order_place_after> <observers> <cartz_mypayment_order_place_after_observer> <type>singleton</type> <class>myorder/order_place_after_observer</class> <method>fraudCheck</method> </cartz_mypayment_order_place_after_observer> </observers> </sales_order_place_after> </events> </global></config>
注: cartz_mypayment_order_place_after_observer是无关紧要的,可以定义任何唯一名
2. 定义类models/order/place/after/observer
<?phpclass NextDigital_NDPayment_Model_Order_Place_After_Observer{ public function fraudCheck($observer){// $order = $observer->getEvent()->getOrder(); Mage::log('Fraud Check Here'); return $this; }}