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