`
hudeyong926
  • 浏览: 2016412 次
  • 来自: 武汉
社区版块
存档分类
最新评论

Magento 中的事件

 
阅读更多

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics