たとえば、このappEmulationを実行し、電子メールに埋め込むためのpaymentBlocksを生成するというメソッドがありますMage_Sales_Model_Order
。sendNewOrderEmail()
これはフロントエンドストアをシミュレートし、上記のブロックを正確に生成できるようにするために行われると言われました...
しかし、そのappEmulationで呼び出されたメソッドは、カスタムモジュールのオブザーバーもトリガーしますか?
ありがとう!
たとえば、このappEmulationを実行し、電子メールに埋め込むためのpaymentBlocksを生成するというメソッドがありますMage_Sales_Model_Order
。sendNewOrderEmail()
これはフロントエンドストアをシミュレートし、上記のブロックを正確に生成できるようにするために行われると言われました...
しかし、そのappEmulationで呼び出されたメソッドは、カスタムモジュールのオブザーバーもトリガーしますか?
ありがとう!
要するに、違います。エリア固有のイベントはapp->loadArea([AREA])
、アクションコントローラースーパークラスの呼び出しを介して有効になりますpreDispatch()
。Mage_Core_Controller_Varien_Action::preDispatch()
(リンク)を参照してください。エリアは子クラスMage_Core_Controller_Front_Action
とによって設定されMage_Adminhtml_Controller_Action
ます。
スクリプトの実行中にディスパッチングコードが評価された場合(たとえば、への呼び出しMage::dispatchEvent()
)、イベントがディスパッチされます。ただし、オブザーバーがエリア固有(frontend
およびなどadminhtml
)として構成されている場合、そのエリアがロードされない限り、これらのイベントはディスパッチされません。
参照の最後のビットについてMage_Core_Model_App_Emulation::startEnvironmentEmulation()
は、領域の負荷を呼び出さないことに注意してください。
私はあなたが尋ねているのとまったく同じ質問を理解しようとしてリンガーを調べました。外部 SSO ログインを構築しようとしていました。Mage_Customer モジュールなどで発生するコントローラー イベントがないことに気付きました。同じ方法が適用されるはずです。エミュレートするコントローラーを決定し、コードで同じイベントを確実にディスパッチするだけです。
ここに私のすべての研究結果を投稿しました...
振り返ってみると、この「core/app_emulation」を使用して同様の方法で私の問題を解決した可能性があります。私はそれをもっと調べなければならないでしょう。