Sự kiện checkout_onepage_controller_success_action
được kích hoạt ngay trước khi bố cục được hiển thị, vì vậy bạn vẫn có thể thao tác nó.
Người quan sát chỉ nhận id đơn hàng làm tham số, vì vậy bạn phải lấy bố cục qua mô hình ứng dụng:
$layout = Mage::app()->getLayout();
Bây giờ bạn có thể thực hiện các thay đổi của mình theo chương trình, như thế này:
$messageBlock = $layout->createBlock('core/template', 'payment_message_block');
$messageBlock->setTemplate('payment_message.phtml');
$layout->getBlock('footer')->append($messageBlock);
Nếu bạn sử dụng controller_action_layout_load_before
sự kiện, bạn cũng có thể tải một điều khiển bố cục tùy chỉnh như thế này, nếu trên trang thành công:
if ($observer->getAction()->getFullActionName() === 'checkout_onepage_success') {
$layout = $observer->getLayout();
$layout->getUpdate()->addHandle('custom_layout_handle');
}
mà bạn có thể định nghĩa trong XML:
<layout>
<custom_layout_handle>
<reference name="footer">
<block type="core/template" name="payment_message_block" template="payment_message.phtml" />
</reference>
</custom_layout_handle>
</layout>
Cập nhật: Khối chân trang được lưu trữ, vì vậy chúng tôi phải đảm bảo rằng một phiên bản khác được lấy từ bộ đệm nếu có thông báo. Ví dụ:
$footer = $layout->getBlock('footer');
$footer->setCacheKey(sha1($footer->getCacheKey() . '-payment-message');
Làm thế nào để truyền dữ liệu di truyền vào tập tin phtml? mà tôi đang thể hiện
Tham chiếu khối của bạn theo tên và sử dụng setData()
. Ví dụ:
$block = $layout->getBlock('payment_message_block')->setData('messsage', 'Hello');
Và trong mẫu:
echo $this->getData('message');