Magentoのイベントの完全なリストはどこで入手できますか?


94

Magentoには、イベントと呼ばれるフックのようなシステムがあることを知っています。誰が呼び出すことができるイベントを決定するために使用できる完全なリストまたはスクリプトを持っていますか?


4
これを素敵なチートシートとして使用しますnicksays.co.uk/magento-events-cheat-sheet-1-7
Derrik Nyomo

1
@DerrikNyomo-それを提供する情報の要約とともに回答として投稿する必要があります。:-)
ベンマーク

1
実際、イベントのチートシートは、「私が欲しいイベントは存在しない」という誤った感覚を与え、使用される可能性のあるイベントを見逃して、何時間ものコーディングを無駄にする可能性があるため、面倒です。動的に作成されます)この質問への回答を投稿しました:リンクと私の回答はこの質問にも関係しています 完全な「リスト」を提供するわけではありませんが、フックしたいアクション/ページのロードに関するイベントの完全なリストを提供します。
ProxiBlue

回答:


102

ほとんどのイベントには動的な名前が付けられているため、すべてのmagentoイベントのリストはありません。

あなたが私に尋ねるなら、これらの重要なイベント(および結果)を知ることは良い出発点です(ニックからのリストの横に):

Mage_Core_Model_Abstractから拡張されたすべてのオブジェクトは、ロード、保存、削除に関する多くのイベントをディスパッチします。

app/code/core/Mage/Core/Model/Abstract.php:255
Mage::dispatchEvent($this->_eventPrefix.'_load_before', $params);
// e.g. sales_order_load_before, checkout_cart_load_before

たとえば、オブジェクトがロードされた後にチェックを追加するには

app/code/core/Mage/Core/Model/Abstract.php:267
Mage::dispatchEvent($this->_eventPrefix.'_load_after', $this->_getEventData());
// e.g. cms_page_load_after

オブジェクトを保存する前に追加データを追加する

app/code/core/Mage/Core/Model/Abstract.php:391
Mage::dispatchEvent($this->_eventPrefix.'_save_before', $this->_getEventData());
// e.g. catalog_product_save_before

「親」が保存された後に他のモデルを保存するには

app/code/core/Mage/Core/Model/Abstract.php:466  
Mage::dispatchEvent($this->_eventPrefix.'_save_after', $this->_getEventData());
// e.g. catalogrule_rule_save_after

モデルが削除される前のクリーンアップ

app/code/core/Mage/Core/Model/Abstract.php:501
Mage::dispatchEvent($this->_eventPrefix.'_delete_before', $this->_getEventData());
// e.g. store_delete_before

モデルを削除する前にクリーンアップしますか、それとも後で削除しますか?あなたはまだ取引中です!

app/code/core/Mage/Core/Model/Abstract.php:529
Mage::dispatchEvent($this->_eventPrefix.'_delete_after', $this->_getEventData());
// e.g. website_delete_after

エンティティが削除されたことを確認したい場合

app/code/core/Mage/Core/Model/Abstract.php:541
Mage::dispatchEvent($this->_eventPrefix.'_delete_commit_after', $this->_getEventData());
// e.g. customer_delete_commit_after

Mage_Core_Model_Resource_Db_Collection_Abstractから拡張されたコレクションには、2つの汎用イベントもあります。

例:SQLを変更してコレクションをロードするには:

app/code/core/Mage/Core/Model/Resource/Db/Collection/Abstract.php:588
Mage::dispatchEvent($this->_eventPrefix.'_load_before', array(
    $this->_eventObject => $this
));
// e.g. sales_order_status_history_collection_load_before

例:オブジェクトにデータを追加するには:

app/code/core/Mage/Core/Model/Resource/Db/Collection/Abstract.php:637
Mage::dispatchEvent($this->_eventPrefix.'_load_after', array(
    $this->_eventObject => $this
));
// e.g. sales_order_shipment_collection_load_after

4
非常に良い答えです。ウィキに押し込めるものを期待しています。重要性_eventPrefixモデルイベント、目標と要求イベント、時折、便利な汎用的なブロックイベント、およびイベントを見つけるためにログインすることの重要性については
benmarks

1
優れた。Magento 2では、すべてのコアクラスにイベントプレフィックスが定義されていることを確認する必要があります。実際にイベントプレフィックスを定義するためにクラスを書き直したので、保存/読み込みイベントにきれいにフックできます。うーん。実際には、Magento 2のソースを自分でチェックするつもりです。
ティムレイノルズ

3
私は通常取るアプローチは、迅速な編集/に戻す/保存しているapp/code/core/Mage/Core/Model/App.phpmage::log($eventName,null,'events.txt',true);するdispatchEvent方法。観察しようとしているページを読み込みます。明らかにこれをそのままにせず、var / logs / events.txtが作成されたら元に戻します。汚い、はい。クイック、はい。:)
B00MER

2
オブザーバーを1ページに収めたい場合に適しています。ただし、注意が必要です。ディスパッチすべきイベントがありますが、ディスパッチされない場合があります。PayPalで払ったときに、スローされていないためか、支払いイベントがあります...
ファビアンBlechschmidt

magento @FabianBlechschmidtで出荷が作成された後に発生するイベントはありますか
Kingshuk Deb

48

流血のは、DO grep 'Mage::dispatchEvent' app/ -rsnイベントのリストがインストールMagentoのバージョン、カスタマイズや拡張に応じて変えることができるので、これは、インストールに固有のイベントのリストを提供します。


2
それは最良のアドバイスであり、サードパーティのモジュールイベントも含まれます。通常、特定のページにどのイベントをフックできるかを知りたい場合、app:dispatchEventパラメーターを記録します。
ペタルジャンバゾフ

1
また、grepは悪い情報を提供します。たとえば、それsales_order_place_afterが起こると主張しますが、それを起動する呼び出しはからコメントアウトされているようですCheckout/Type/Onepage.php
小次郎

これは、動的に生成されたすべてのイベントを完全に見落とすため、利用可能なイベントの一部のみをピックアップするため、適切な回答ではありません。@PetarDzhambazovは、ディスパッチャーからログを記録し、関心のあるページをロードするための良いアドバイスを提供します。これまでのベストアンサーは、FabianBlechschmidt
Dom

26

これを素敵なチートシートhttp://www.nicksays.co.uk/magento-events-cheat-sheet-1-7/として使用します。1.7で呼び出すことができるすべてのイベントがあります。


4
既にコンテンツをリンクする良い仕事をしてきたので、最高でも場合には、ここでコンテンツを提供するために、ニックは「Magentoのネジ」と言うと、彼のページ:-)を削除
benmarks

3
私はこのリストのファンではありません。1:不完全である、2:Magentoの「すべて」のイベントを含むMagentoに関する他の1231のブログがあります(+ Magentoの一部のWikiページ)。
FlorinelChis

@benmarksは、その間に何が起こったのかを推測します
...-toon81

9

私はこの質問に答えていることを知っています、ここに私の方法を追加します:

  • ブラウザで観察したいページを準備します
  • app / Mage.phpを開きます
  • ためpublic static function dispatchEvent、私は追加初めで:(〜446 LN) //Mage::log($name, null, 'events.log', true);
  • その行のコメントを外し、
  • 私がいるページを更新する
  • その行を再度コメントする

次に、var / log / events.log(〜40kb)を開くと、そのページでのみ多くのイベントが表示されます!:)


2
これにより、ストア構成がマージされる前に発生するイベントがいくつか欠落します。
ベンチマーク

6

回答はすでに受け入れられていますが、今後も回答を投稿します。

Magentoが持っているイベントのリストを表示するには、3つのオプションがあります。

1) Googleで、Magentoイベントのリストを作成した人がたくさんいます

2)controller_action_predispatch他のイベントが呼び出される前に呼び出されるイベントであるイベントをフックするモジュールを作成します。このモジュール内では、ディスパッチされたいくつかのイベントを記録できます。

config.xmlに次を追加します

<events>
    <controller_action_postdispatch>
        <observers>
            <controller_action_after>
                <class>yourmodule/observer</class>
                <method>hookToControllerActionPostDispatch</method>
            </controller_action_after>
        </observers>
    </controller_action_postdispatch>
</events>

そして、yourmodule / Model / Observer内:

public function hookToControllerActionPostDispatch($observer) {
    Mage::log($observer->getEvent()->getControllerAction()->getFullActionName());
}

上記は、ディスパッチされるすべてのイベントを記録します...

3) SSHアクセスがある場合は、次のコマンドを実行して、すべてのイベント(およびディスパッチされたファイル)の概要を取得できます。

cd /path/to/<magento-root>
grep -nris 'dispatchEvent' app/code/

1
申し訳ありませんが、#3は良好ですが、回答の1と2の情報は実際には正しくありません。1)controller_action_predispatch特に前に発生したイベントがいくつかありますcontroller_front_init_before。2)このアプローチは、ディスパッチされたすべてのイベントをログに記録するだけではありません。これはタイプミスまたは不完全なセクションですか?
ベンチマーク

「ほとんど」に編集;)
ケニー

2
申し訳ありませんが、まだあまり正確ではありません:-(-ディスパッチされたイベント(プレディスパッチ、レイアウト、レンダリング、およびモデルとコレクションのロード)がさらに多くあります
......-

「いくつかのイベント」に対する回答を更新しました。
ケニー



4

MagentoのコアMageモジュールでgrepを実行し、リストを作成しました。

Magentoイベントの包括的なリスト

PS指摘したように、Magentoの非推奨の関数内にあるイベントが含まれている可能性があるため、実装前にファイルと行の参照を確認してください。

提案のために開いてください!


1
あなたはまだサブクラス化されたすべての魔法のイベントを見逃しています。がっかりすることはできません。
ベンマーク14

マジックイベントは?動的なものは?plz @benmarks
huzefam

たとえば、github.com
benmarks

私は同意する@benmarks、私たちはこれを明示的にリストを準備する必要はないと思う
huzefam

したがって、「徹底的な」使用に基づいて提供された私のコメント
ベンチマーク14

4
grep "::dispatchEvent" -R * | sort -u

grep "eventPrefix" -R * | sort -u

前述のgrepコマンドは重複(多く)をレンダリングし、動的に生成されるイベント名を理解するために必要なイベントプレフィックスのリストをカバーしません。これらのコマンドは、両方のリストを一意の値のみでレンダリングします。他のgrep回答のように-nフラグを追加して、行番号iを取得できます。しかし、質問では、コード内のすべてがどこにあるかは尋ねませんでした。〜_〜


ここにも同様の答えがあります。@TimBezhashvylyの答えを参照してください
Kトミー

並べ替え...前にリストしたgrepコマンドは重複(多く)をレンダリングし、動的に生成されたイベント名を理解するために必要なイベントプレフィックスのリストをカバーしません。これらのコマンドは、両方のリストを一意の値のみでレンダリングします。他のgrep回答のように-nフラグを追加して、行番号iを取得できます。しかし、質問では、コード内のすべてがどこにあるかは尋ねませんでした。
mprototype

この説明を回答に追加してください。その後、あなたの答えはとてもクールになります...(賛成票を投じる準備ができました):
ラジェエフKトミー

それは役立ちますか?
mprototype

はい。そのために+1。:)
ラジーエフKトミー

3

こちらにもチートシートがありますhttp://mikebywaters.wordpress.com/2012/07/23/magento-event-observer-list/


1
単独のリンクは、それ自体では意味がなくターゲットリソースが将来も生きていることが保証されないため、貧弱な回答と見なされます(faqを参照)。ここに回答の重要な部分を含め、参照用のリンクを提供することが望ましいでしょう
j0k





弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.