[[Magentoめも]]

*Magento2 イベントをObserverで検知する [#r5ce9026]

Magento2内ではいわゆるフックポイントがあちこちに仕掛けられています。

例えばこんな感じ。

 $this->_eventManager->dispatch('sales_order_place_after', ['order' => $this]);

Observerにてこれをフックし、拡張することができるようです。

*events.xmlの定義 [#kcac2c9e]

vendor\magento\module-catalog\Controller\Category\View.php に設定されている catalog_controller_category_init_after イベントをフックします。

events.xml を設置するパスは管理画面だと adminhtml、公開画面だと frontend となります。

etc/frontend/events.xml

 <?xml version="1.0"?>
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="catalog_controller_category_init_after">
         <observer name="yassujp_helloworld_catalog_controller_category_init_after" instance="Yassujp\HelloWorld\Observer\MyObserver" />
     </event>
 </config>

*Observerクラスの実装 [#ia13abbf]

Observerクラスは Observer フォルダ以下に設置します。

dispatchで渡された変数は $observer->getEvent() で取得できるみたいです。

Observer/MyObserver.php

 <?php
 
 namespace Yassujp\HelloWorld\Observer;
 
 use Magento\Framework\Event\ObserverInterface;
 
 class MyObserver implements ObserverInterface
 {
     public function __construct()
     {
     }
 
     public function execute(\Magento\Framework\Event\Observer $observer)
     {
         $category = $observer->getEvent()->getCategory();
         echo $category->getName().' Local';
     }
 }

これでカテゴリページを閲覧したときに、左上に表示している カテゴリ名 Local と表示されていることが確認できます。

*既存のObserverの無効化 [#r2bd5154]

コアに定義されているObserverを無効化することもできるようです。~
typeの値に disabled を指定してみましょう。

参考~
http://devdocs.magento.com/guides/v2.0/extension-dev-guide/events-and-observers.html


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS