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を無効化することもできるようです。 参考 |