1

私の拡張機能は、チェックアウトが実行された場合にブロックにパラメーター (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 をブロックに渡す方法はありますか?

4

0 に答える 0