L'evento checkout_onepage_controller_success_action
viene attivato subito prima del rendering del layout, quindi è ancora possibile modificarlo.
L'osservatore riceve l'ID dell'ordine solo come parametro, quindi devi ottenere il layout tramite il modello dell'app:
$layout = Mage::app()->getLayout();
Ora puoi apportare le modifiche a livello di codice, in questo modo:
$messageBlock = $layout->createBlock('core/template', 'payment_message_block');
$messageBlock->setTemplate('payment_message.phtml');
$layout->getBlock('footer')->append($messageBlock);
Se si utilizza l' controller_action_layout_load_before
evento, è anche possibile caricare un handle di layout personalizzato come questo, se nella pagina di successo:
if ($observer->getAction()->getFullActionName() === 'checkout_onepage_success') {
$layout = $observer->getLayout();
$layout->getUpdate()->addHandle('custom_layout_handle');
}
che puoi definire in 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>
Aggiornamento: il blocco piè di pagina viene memorizzato nella cache, quindi dobbiamo assicurarci che una versione diversa venga recuperata dalla cache se il messaggio è presente. Per esempio:
$footer = $layout->getBlock('footer');
$footer->setCacheKey(sha1($footer->getCacheKey() . '-payment-message');
come passare i dati generati al file phtml? che sto mostrando
Fai riferimento al tuo blocco per nome e utilizzo setData()
. Per esempio:
$block = $layout->getBlock('payment_message_block')->setData('messsage', 'Hello');
E nel modello:
echo $this->getData('message');