イベントオブザーバーでlayout.xmlを使用する方法を知りたい。
支払いが完了したときにメッセージをフッターに表示したい。
私はイベントを使用する必要があることを知っています checkout_onepage_controller_success_action
イベントオブザーバーでコントローラーまたはlayout.xmlを使用する方法
イベントオブザーバーでlayout.xmlを使用する方法を知りたい。
支払いが完了したときにメッセージをフッターに表示したい。
私はイベントを使用する必要があることを知っています checkout_onepage_controller_success_action
イベントオブザーバーでコントローラーまたはlayout.xmlを使用する方法
回答:
イベントcheckout_onepage_controller_success_action
はレイアウトがレンダリングされる直前にトリガーされるため、引き続き操作できます。
オブザーバーは注文IDをパラメーターとしてのみ受け取るため、アプリモデルを介してレイアウトを取得する必要があります。
$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
設計上の理由で必要な場合は、キャッシュキーを変更するソリューションを追加しました。