私の拡張機能は、チェックアウトが実行された場合にブロックにパラメーター (order_id) を渡すために、「checkout_onepage_controller_success_action」にオブザーバーを設定して、サイトのすべてのページのブロック「before_body_end」を追加します。
$block = Mage::app()->getLayout()->getBlock('my_block');
if ($block) {
$block->setOrderId($orderId);
}
これはうまくいきましたが、「checkout_onepage_controller_success_action」を起動せずにチェックアウトプロセス全体を実装する「Rouge」拡張機能に遭遇したため、拡張機能が機能しなくなりました。私は他のイベントにフックしようとしました: 'checkout_submit_all_after' または 'sales_order_place_after' (どこかに文書化されているのを見つけたので、構成を「フロントエンド」から「グローバル」に移動する必要がありました)、しかし、何を試しても私のブロックは定義されませんでした. (タイミングの問題だと思います)。そこで、オブザーバーのレジストリーに order_id を設定して、ブロックで取得することにしました。
Mage::register('my_order_id', $orderId);
// Make sure it is set
Mage::log("Observer");
Mage::log(strftime('%c'));
Mage::log(Mage::registry('my_order_id'));
私のブロックでは、次も印刷します。
Mage::log("Block");
Mage::log(strftime('%c'));
Mage::log(Mage::registry('my_order_id'));
そして、私のログは次のとおりです。
2013-02-24T13:01:56+00:00 DEBUG (7): Observer
2013-02-24T13:01:56+00:00 DEBUG (7): Sun Feb 24 13:01:56 2013
2013-02-24T13:01:56+00:00 DEBUG (7): 60
2013-02-24T13:01:57+00:00 DEBUG (7): Block
2013-02-24T13:01:57+00:00 DEBUG (7): Sun Feb 24 13:01:57 2013
2013-02-24T13:01:57+00:00 DEBUG (7):
orderId をブロックに渡す方法はありますか?