如何禁用Magento事件
有些情况下你希望禁用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”,事件将不会被执行。
电商网站开发服务。
版权声明:本站内容源自互联网,如有内容侵犯了你的权益,请联系删除相关内容。