Das Ereignis checkout_onepage_controller_success_action
wird unmittelbar vor dem Rendern des Layouts ausgelöst, sodass Sie es weiterhin bearbeiten können.
Der Beobachter erhält nur die Auftrags-ID als Parameter, daher müssen Sie das Layout über das App-Modell abrufen:
$layout = Mage::app()->getLayout();
Jetzt können Sie Ihre Änderungen programmgesteuert wie folgt vornehmen:
$messageBlock = $layout->createBlock('core/template', 'payment_message_block');
$messageBlock->setTemplate('payment_message.phtml');
$layout->getBlock('footer')->append($messageBlock);
Wenn Sie das controller_action_layout_load_before
Ereignis verwenden, können Sie auch ein benutzerdefiniertes Layout-Handle wie dieses laden, wenn Sie sich auf der Erfolgsseite befinden:
if ($observer->getAction()->getFullActionName() === 'checkout_onepage_success') {
$layout = $observer->getLayout();
$layout->getUpdate()->addHandle('custom_layout_handle');
}
die Sie in XML definieren können:
<layout>
<custom_layout_handle>
<reference name="footer">
<block type="core/template" name="payment_message_block" template="payment_message.phtml" />
</reference>
</custom_layout_handle>
</layout>
Update: Der Fußzeilenblock wird zwischengespeichert, daher müssen wir sicherstellen, dass eine andere Version aus dem Cache abgerufen wird, wenn die Nachricht vorhanden ist. Zum Beispiel:
$footer = $layout->getBlock('footer');
$footer->setCacheKey(sha1($footer->getCacheKey() . '-payment-message');
Wie werden generierte Daten an eine HTML-Datei übergeben? was ich zeige
Verweisen Sie auf Ihren Block nach Name und Verwendung setData()
. Zum Beispiel:
$block = $layout->getBlock('payment_message_block')->setData('messsage', 'Hello');
Und in der Vorlage:
echo $this->getData('message');
before_body_end
was nicht zwischengespeichert istfooter
aus Designgründen sein muss, habe ich eine Lösung hinzugefügt, die den Cache-Schlüssel ändert.