controller_front_init_routers
サービスからデータを取得しREST
てメニューを構築するイベント オブザーバーを作成しました。オブザーバーがバックエンド (たとえば、製品を保存する方法がない) と残りのサービスでエラーを生成することを発見するまで、すべて問題ありませんでした。私は結論を出すのに苦労しているので、いくつかの質問をしました。
- フロントエンドのみの場合に備えて、Observer メソッドをトリガーする条件を作成しようとしました。しかし、Magento は常にフロントエンド領域にいると考えています。
(var_dump(Mage::app()->getStore()->isAdmin()) は常に false を返し、var_dump(Mage::getDesign()->getArea() == 'adminhtml') と同じです)
Can anyone explain what's happened ?
また、1つの解決策は、イベントオブザーバーをフロントエンド領域に配置し
config.xml
てロードすることMage::app()->loadArea($this->getLayout()->getArea());
ですが、このコードをどこに配置すればよいですか? 新しいオブザーバーで?それは最も適切なプロセスですか?イベントを一度リッスンしてからリスナーを一時停止する方法はありますか? (メニューが登録されると、もうイベントを聞く必要はありません)
イベントの使用は
controller_front_init_routers
最良の選択ですか?誰がそのような問題を見たことがありますか?
私はMagento版に取り組んでいます。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);
}
}