我制作了controller_front_init_routers
事件观察者,它从REST
服务中检索数据以构建菜单。
一切都很好,直到我发现观察者在后端产生错误(例如无法保存产品)以及其他服务。
我正在努力争取任何结论,所以我提出了一些讯问。
(var_dump(Mage :: app() - > getStore() - > isAdmin())返回总是false 和var_dump一样(Mage :: getDesign() - > getArea()== 'adminhtml'))
Can anyone explain what's happened ?
另一种解决方案是将事件观察者放在前端
config.xml
中的区域并加载它
Mage::app()->loadArea($this->getLayout()->getArea());
但我应该在哪里
放这段代码?在一个新的观察者?这是最多的
适当的过程?
这是一种监听事件然后暂停监听器的方法吗? (一旦我的菜单被注册,我就不需要再听这个活动了)
使用controller_front_init_routers
事件是最佳选择吗?
谁见过这样的问题?
我在Magento ver工作。 1.12.0.2
这里是config.xml
<globals>
....
<events>
<controller_front_init_routers>
<observers>
<connector_services_observer>
<type>singleton</type>
<class>Connector_Services_Model_Observer</class>
<method>getEvent</method>
</connector_services_observer>
</observers>
</controller_front_init_routers>
</events>
</globals>
这里是我的模型观察者中的函数getEvent
public function getEvent($observer){
//model which do post or get requests and return xml and menu
$_getRest = Mage::getModel('connector_services/RestRequest');
//the paths
$_menu_url = Mage::getStoreConfig('connector_service_section/connector_service_url/service_menu_url');
//put a store config
$path_nlist = 'veritas-pages-list.xml';
$_isAdmin = Mage::helper('connector_services');
$currentUrl=Mage::helper("core/url")->getCurrentUrl();
//the way I found to trigger methods only in frontend
//that's not very beautiful I know
$admin = preg_match("#/admin/#",$currentUrl);
$api = preg_match("#/api/#",$currentUrl);
//
if ( !$admin && ! $api ){
$_menuXml = $_getRest->postRequest($_menu_url);
if( $_menuXml )
{
$_menu = $_getRest->makeMenu($_menuXml);
Mage::register('menu',$_menu);
}
}
答案 0 :(得分:1)
您应该能够将查询字符串传递给其他服务,类似于您在地址栏中输入的方式。 Magento会将它转发给观察者,你可以将它用作旗帜。
在代码中添加以下内容:
const USE_FRONTEND = 'usefront';
public function getEvent($observer){
this->request = $observer->getEvent()->getData('front')->getRequest();
// If the constant is in the query string
if ($this->request->{self::USE_FRONTEND}) {
// Do code related to this request
die('Frontend flag detected');
}
}
像这样呼叫您的网站并传递查询字符串
http://www.yourmagentosite.com/?usefront=true
我对Magento的新REST api并不是非常熟悉,但我知道它在浏览器中有效。也许这个解释可以帮助你。