Событие checkout_onepage_controller_success_action
запускается непосредственно перед рендерингом макета, поэтому вы все равно можете им манипулировать.
Наблюдатель получает идентификатор заказа только в качестве параметра, поэтому вы должны получить макет через модель приложения:
$layout = Mage::app()->getLayout();
Теперь вы можете вносить изменения программно, например:
$messageBlock = $layout->createBlock('core/template', 'payment_message_block');
$messageBlock->setTemplate('payment_message.phtml');
$layout->getBlock('footer')->append($messageBlock);
Если вы используете controller_action_layout_load_before
событие, вы также можете загрузить собственный дескриптор макета, например, на странице успеха:
if ($observer->getAction()->getFullActionName() === 'checkout_onepage_success') {
$layout = $observer->getLayout();
$layout->getUpdate()->addHandle('custom_layout_handle');
}
который вы можете определить в 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>
Обновление: блок нижнего колонтитула кэшируется, поэтому мы должны убедиться, что другая версия извлекается из кэша, если сообщение присутствует. Например:
$footer = $layout->getBlock('footer');
$footer->setCacheKey(sha1($footer->getCacheKey() . '-payment-message');
Как передать сформированные данные в файл phtml? который я показываю
Ссылка на ваш блок по имени и использованию setData()
. Например:
$block = $layout->getBlock('payment_message_block')->setData('messsage', 'Hello');
И в шаблоне:
echo $this->getData('message');
before_body_end
что не кэшируетсяfooter
целях дизайна, я добавил решение, которое изменяет ключ кеша.