服务报价 | 域名主机 | 网络营销 | 软件工具| [加入收藏]
 热线电话: #
当前位置: 主页 > php教程 > magento教程 >

如何禁用Magento事件

时间:2017-01-06 00:36来源:未知 作者:最模板 点击:
有些情况下你希望禁用Magento事件。例如,在一个我们的项目中,我们决定禁用所有的Mage_Log事件来减少数据库的sql查询。我们将在这篇文章中描述我们是怎么做的,但我相信这个方法可

有些情况下你希望禁用Magento事件。例如,在一个我们的项目中,我们决定禁用所有的“Mage_Log”事件来减少数据库的sql查询。我们将在这篇文章中描述我们是怎么做的,但我相信这个方法可以在很多场景中应用。

Magento事件是怎么定义的呢?例如,你到Magento模型“Mage_Log”的config.xml文件中,你会发现下一个内容在“events”标签里。

“Events”标签包含子事件,你可以看config.xml文件中的块。

<frontend>
	<events>
            <controller_action_predispatch>
                <observers>
                    <log>
                        <class>log/visitor</class>
                        <method>initByRequest</method>
                    </log>
                </observers>
            </controller_action_predispatch>
            .... other events
        </events>
</frontend>

例如,如果你想要禁用 “controller_action_predispatch” 事件,你需要创建自己的模型并将它放到你的config.xml文件中。

<frontend>
	<events>
		<controller_action_predispatch>
			<observers><log><type>disabled</type></log></observers>
		</controller_action_predispatch>
	</events>
</frontend>

也许你注意到了,我们添加值为“disable“的“type”标签。进入Magento类 “Mage_Core_Model_App” ,在“dispatchEvent”方法中,你将看到:

 foreach ($events[$eventName]['observers'] as $obsName=>$obs) {
                $observer->setData(array('event'=>$event));
                Varien_Profiler::start('OBSERVER: '.$obsName);
                switch ($obs['type']) {
                    case 'disabled': // if we set disabled type, event will not be executed.
                        break;
                    case 'object': case 'model':
                        $method = $obs['method'];
                        $observer->addData($args);
                        $object = Mage::getModel($obs['model']);
                        $this->_callObserverMethod($object, $method, $observer);
                        break;
                    default:
                        $method = $obs['method'];
                        $observer->addData($args);
                        $object = Mage::getSingleton($obs['model']);
                        $this->_callObserverMethod($object, $method, $observer);
                        break;
                }
                Varien_Profiler::stop('OBSERVER: '.$obsName);
            }

如果设置事件type为“disabled”,事件将不会被执行。

(责任编辑:最模板)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
热点内容