Magento2 イベントをObserverで検知する †Magento2内ではいわゆるフックポイントがあちこちに仕掛けられています。 例えばこんな感じ。 $this->_eventManager->dispatch('sales_order_place_after', ['order' => $this]); Observerにてこれをフックし、拡張することができるようです。 events.xmlの定義 †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クラスの実装 †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の無効化 †コアに定義されているObserverを無効化することもできるようです。 参考 |