magento的事件机制就跟dural的hook机制一样,为了更好的扩展magento。magento里面的很多操作都是有事件派送的,比如产品的保存,删除,订单的保存,等等,很多很多。
如何在自己的程序中派送事件?
事件派送很简单,如以下代码
- Mage::dispatchEvent('checkout_onepage_controller_success_action', array('quote_item' => $item));
如何监听事件?
可以使用 Mage::addObserver来监听事件,但一般不那样做,基本上都是在etc/config.xml只添加的。 如以下代码
- <?xml version="1.0" encoding="UTF-8"?>
- <config>
- <global>
- <models>
- <boomorder>
- <class>Boom_Order_Model</class>
- </boomorder>
- </models>
- </global>
- <frontend>
- <events>
- <checkout_onepage_controller_success_action>
- <observers>
- <boom_order_observer>
- <type>singleton</type>
- <class>boom_order_model_observer</class>
- <method>myOrderProcess</method>
- </boom_order_observer>
- </observers>
- </checkout_onepage_controller_success_action>
- </events>
- </frontend>
- </config>
当checkout_onepage_controller_success_action事件派送之后,会有函数会执行,它们分别是Boom/Order/Model/ Observer.php文件里面的myOrderProcess方法。
- <?php
- class Boom_Order_Model_Observer
- {
- /**
- * Event Hook: checkout_onepage_controller_success_action
- * @param $observer Varien_Event_Observer
- */
- public function myOrderProcess($observer)
- {
- Mage::log("Enter myOrderProcess");
- $order = new Mage_Sales_Model_Order();
- $incrementId = Mage::getSingleton('checkout/session')->getLastRealOrderId();
- $order->loadByIncrementId($incrementId);
- Mage::log("Exit myOrderProcess");
- }
- }
sdfs