19

magentoでhtmlにレンダリングする前に、ページが読み込まれるたびに1回発生するイベントがあるかどうか疑問に思っていますか?

これは、ユーザーセッションに依存しない半静的属性に対してビジネスロジックを実行する場合に役立つことがあります。

たとえば、これを使用して、正規タグをmagentoのヘッダーに配信します。

4

4 に答える 4

40

ほとんどのページ/コンテンツ生成リクエストに対してディスパッチされるリクエスト関連のイベントがいくつかあります。以下は、いくつかの有用なものの処理順序の部分的なリストであり、他の人がこの投稿に他の人とコメントすることを期待しています。これらの多くはあなたのニーズに適していません(私はあなたが検討し始めるべき場所を以下に太字で示しました)。ブロックインスタンス化に関連するイベントもいくつかあります。これらのイベントは、目的に応じて観察できますが、すべてのブロックに一般的であり、実際には適切ではありません。

  • 最初の実用的な単独発砲イベントは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_beforecontroller_front_init_before

于 2013-03-25T14:20:46.600 に答える
3

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つのイベントが役立つ場合があります。

于 2013-03-25T14:08:22.790 に答える
1

あなたはこのイベントを探していると思います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;
    }
于 2013-03-25T14:09:50.003 に答える
1

オブザーバーを使用してcontroller_front_init_routersイベントを使用できます。そのオブザーバーメソッドでは、次のようにリクエストオブジェクトを取得できます。

$request = $observer->getEvent()->getData('front')->getRequest();

于 2014-11-05T10:48:36.567 に答える