L'événement checkout_onepage_controller_success_action
est déclenché juste avant le rendu de la mise en page, vous pouvez donc toujours le manipuler.
L'observateur ne reçoit que l'ID de commande en tant que paramètre, vous devez donc obtenir la mise en page via le modèle d'application:
$layout = Mage::app()->getLayout();
Vous pouvez maintenant effectuer vos modifications par programme, comme ceci:
$messageBlock = $layout->createBlock('core/template', 'payment_message_block');
$messageBlock->setTemplate('payment_message.phtml');
$layout->getBlock('footer')->append($messageBlock);
Si vous utilisez l' controller_action_layout_load_before
événement, vous pouvez également charger un descripteur de mise en page personnalisé comme celui-ci, si sur la page de réussite:
if ($observer->getAction()->getFullActionName() === 'checkout_onepage_success') {
$layout = $observer->getLayout();
$layout->getUpdate()->addHandle('custom_layout_handle');
}
que vous pouvez définir 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>
Mise à jour: le bloc de pied de page est mis en cache, nous devons donc nous assurer qu'une version différente est extraite du cache si le message est présent. Par exemple:
$footer = $layout->getBlock('footer');
$footer->setCacheKey(sha1($footer->getCacheKey() . '-payment-message');
comment passer des données générées au fichier phtml? que je montre
Référencez votre bloc par son nom et son utilisation setData()
. Par exemple:
$block = $layout->getBlock('payment_message_block')->setData('messsage', 'Hello');
Et dans le modèle:
echo $this->getData('message');