magentoでhtmlにレンダリングする前に、ページが読み込まれるたびに1回発生するイベントがあるかどうか疑問に思っていますか?
これは、ユーザーセッションに依存しない半静的属性に対してビジネスロジックを実行する場合に役立つことがあります。
たとえば、これを使用して、正規タグをmagentoのヘッダーに配信します。
magentoでhtmlにレンダリングする前に、ページが読み込まれるたびに1回発生するイベントがあるかどうか疑問に思っていますか?
これは、ユーザーセッションに依存しない半静的属性に対してビジネスロジックを実行する場合に役立つことがあります。
たとえば、これを使用して、正規タグをmagentoのヘッダーに配信します。
ほとんどのページ/コンテンツ生成リクエストに対してディスパッチされるリクエスト関連のイベントがいくつかあります。以下は、いくつかの有用なものの処理順序の部分的なリストであり、他の人がこの投稿に他の人とコメントすることを期待しています。これらの多くはあなたのニーズに適していません(私はあなたが検討し始めるべき場所を以下に太字で示しました)。ブロックインスタンス化に関連するイベントもいくつかあります。これらのイベントは、目的に応じて観察できますが、すべてのブロックに一般的であり、実際には適切ではありません。
最初の実用的な単独発砲イベントはcontroller_front_init_before
です。このイベントは、ディスパッチされたすべての要求に応答して、フロントコントローラーの初期化でディスパッチされます。アクションコントローラーが呼び出される前にディスパッチされるため、グローバルエリアオブザーバーのみがこのイベントを監視できます。
リクエストがフロントコントローラーからルーターを経由してアクションコントローラーにルーティングされると仮定すると、レンダリングの前に観察できるイベントpreDispatch()
controller_action_predispatch
がいくつかあります-すべてのイベントと2つの動的イベントハンドルで消費される可能性のある一般的なイベントハンドルに注意してください:
Mage::dispatchEvent('controller_action_predispatch', array('controller_action' => $this));
Mage::dispatchEvent('controller_action_predispatch_' . $this->getRequest()->getRouteName(),
array('controller_action' => $this));
Mage::dispatchEvent('controller_action_predispatch_' . $this->getFullActionName(),
array('controller_action' => $this));
応答がどのようにレンダリングされるかは、利用可能なイベントに影響を与える可能性があります。主なバリエーションは、応答をレンダリングするためにレイアウトの更新が使用されているかどうか(およびその方法)に由来します。たとえば、core_layout_update_updates_get_after
構成されたモジュールレイアウト更新ファイルのリストにレイアウト更新ファイルを挿入するために使用できます(まれですが、潜在的に有用なケース)。コントローラのアクションはレイアウトモデリングと密接に関連しているため、機能する可能性のあるイベントがいくつかあります。
renderLayout()
それがあなたが気にするすべてのアクションで使用されていると仮定すると、それがディスパッチする2つのイベント(1つはジェネリックと1つはルート固有)があります:
Mage::dispatchEvent('controller_action_layout_render_before');
Mage::dispatchEvent('controller_action_layout_render_before_'.$this->getFullActionName());
ルーティング、ディスパッチ、ビューの構成、ブロックのインスタンス化、およびレンダリングがすべて完了した後、応答が送信される前にフロントコントローラーによってディスパッチされる最後のイベントが1つあります。このイベントはあなたのニーズには適していませんが、この答えを始めたイベントの素晴らしいブックエンドです。 controller_front_send_response_before
controller_front_init_before
http://www.nicksays.co.uk/magento-events-cheat-sheet-1-7/ これは役に立ちます。
app/code/core/Mage/Core/Controller/Varien/Action.php
このイベント
controller_action_layout_load_before
解雇されます
app/code/core/Mage/Core/Block/Abstract.php
イベント
core_block_abstract_to_html_before
上記の2つのイベントが役立つ場合があります。
あなたはこのイベントを探していると思いますcontroller_action_layout_render_before_RouteName_ControllerName_ActionName
Mage
以下の関数で、クラスからのページの読み込み時に発生するすべてのイベントをログに記録することもできます。
public static function dispatchEvent($name, array $data = array())
{
Mage::log($name);
Varien_Profiler::start('DISPATCH EVENT:'.$name);
$result = self::app()->dispatchEvent($name, $data);
Varien_Profiler::stop('DISPATCH EVENT:'.$name);
return $result;
}
オブザーバーを使用してcontroller_front_init_routersイベントを使用できます。そのオブザーバーメソッドでは、次のようにリクエストオブジェクトを取得できます。
$request = $observer->getEvent()->getData('front')->getRequest();