1

たとえば、このappEmulationを実行し、電子メールに埋め込むためのpaymentBlocksを生成するというメソッドがありますMage_Sales_Model_OrdersendNewOrderEmail()これはフロントエンドストアをシミュレートし、上記のブロックを正確に生成できるようにするために行われると言われました...

しかし、そのappEmulationで呼び出されたメソッドは、カスタムモジュールのオブザーバーもトリガーしますか?

ありがとう!

4

2 に答える 2

3

要するに、違います。エリア固有のイベントは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()は、領域の負荷を呼び出さないことに注意してください。

于 2013-01-09T21:47:53.350 に答える
0

私はあなたが尋ねているのとまったく同じ質問を理解しようとしてリンガーを調べました。外部 SSO ログインを構築しようとしていました。Mage_Customer モジュールなどで発生するコントローラー イベントがないことに気付きました。同じ方法が適用されるはずです。エミュレートするコントローラーを決定し、コードで同じイベントを確実にディスパッチするだけです。

ここに私のすべての研究結果を投稿しました...

外部スクリプトから config.xml の <frontend> で <controller_action_predispatch> を監視するコントローラーレス コア Magento モジュールをトリガーするにはどうすればよいですか?

振り返ってみると、この「core/app_emulation」を使用して同様の方法で私の問題を解決した可能性があります。私はそれをもっと調べなければならないでしょう。

于 2013-01-09T21:27:14.913 に答える