1

我的扩展程序为我网站上的每个页面添加了一个块“before_body_end”,并在“checkout_onepage_controller_success_action”上设置了一个观察者,以将参数(order_id)传递给我的块,以防执行结帐。

    $block = Mage::app()->getLayout()->getBlock('my_block');
    if ($block) {
        $block->setOrderId($orderId);
    }

这很好用,但是现在我遇到了一些“Rouge”扩展程序,它实现了整个结帐过程而无需触发“checkout_onepage_controller_success_action”,因此我的扩展程序停止工作。我试过挂钩其他事件:'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