El evento checkout_onepage_controller_success_action
se activa justo antes de que se procese el diseño, por lo que aún puede manipularlo.
El observador solo recibe la identificación de la orden como parámetro, por lo que debe obtener el diseño a través del modelo de aplicación:
$layout = Mage::app()->getLayout();
Ahora puede hacer sus cambios mediante programación, así:
$messageBlock = $layout->createBlock('core/template', 'payment_message_block');
$messageBlock->setTemplate('payment_message.phtml');
$layout->getBlock('footer')->append($messageBlock);
Si usa el controller_action_layout_load_before
evento, también puede cargar un controlador de diseño personalizado como este, si está en la página de éxito:
if ($observer->getAction()->getFullActionName() === 'checkout_onepage_success') {
$layout = $observer->getLayout();
$layout->getUpdate()->addHandle('custom_layout_handle');
}
que puedes definir en 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>
Actualización: el bloque de pie de página se almacena en caché, por lo que debemos asegurarnos de que se obtenga una versión diferente del caché si el mensaje está presente. Por ejemplo:
$footer = $layout->getBlock('footer');
$footer->setCacheKey(sha1($footer->getCacheKey() . '-payment-message');
¿Cómo pasar datos generados al archivo phtml? que estoy mostrando
Haz referencia a tu bloque por nombre y uso setData()
. Por ejemplo:
$block = $layout->getBlock('payment_message_block')->setData('messsage', 'Hello');
Y en la plantilla:
echo $this->getData('message');
before_body_end
que no está en cachéfooter
por razones de diseño, agregué una solución que cambia la clave de caché.