私が取り組んでいるモジュールの場合、ショッピング カート画面にブロックを追加したいのですが、目立たないようにして、カートの内容の下で、他のブロック (クーポン、配送見積もり、合計、...)。
私は目立たない部分を行うことができました: オブザーバーがリッスンしcontroller_action_layout_load_before
、FullNameActionがcheckout_cart_index
私のレイアウト更新 xml ファイルのハンドルを追加する場合:
オブザーバー:
public function showUpperGifts($observer)
{
$fullNameAction = $observer->getEvent()->getAction()->getFullActionName();
if ($this->_isEnabled &&
($fullNameAction == 'checkout_cart_index')) {
$layoutUpdate = $observer->getEvent()->getLayout()->getUpdate()
->addHandle('my_special_handle');
}
}
そしてレイアウトファイル:
<my_special_handle>
<reference name="content">
<block type="module/block" name="module_block" template="module/block.phtml"/>
</reference>
</my_special_handle>
これで、phtml ファイルの内容が表示されますが、必要な場所に配置できません。
私の最初の試みはbefore="name.of.block"
属性を使用することでしたが、うまくいきません。使用すると、ブロックbefore="whatever"
内のすべての前に配置され、使用するとすべての後に配置されます。要するに、それはの内容または考慮に入れません。Magento のコア モジュールの XML レイアウト ファイルを見て、前後に配置するブロックが左右の列の内側にある場合にのみ、および
の引数が表示されることに気付きました。だから私の推測では、それはそれらのコラムにとって特別なものだと思います。 checkout.cart
after="whatever"
before
after
before
after
私の質問は、コンテンツ内のブロックの場所を指定できますか? はい、どのように?
別の解決策は、ブロックを非同期的にロードすることです。これにより、選択した div に AJAX 呼び出しの結果を追加できますが、可能であれば「通常の」方法で実行したいと思います。
読んでくれてありがとう :)