对于我正在处理的模块,我想在购物车屏幕中添加一个块,我想不显眼地做它,我想将它放在购物车内容下方和其他块之前(优惠券,运费估计,总数,...)。
我已经设法做到了不显眼的部分:观察者听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"
它,则在checkout.cart
块内的所有内容之前,如果我使用after="whatever"
它,则在所有内容之后。简而言之,它没有考虑before
或after
考虑的内容。
查看 Magento 核心模块的 XML 布局文件,我意识到这些参数只在它们放置在其之后或之前的块位于右/左列内时才会出现before
。after
所以我的猜测是,这对那些专栏来说是特别的。
所以我的问题是,我可以在内容中指定我的块的位置吗?是的,怎么做?
另一种解决方案是异步加载块,因为我可以将 AJAX 调用的结果附加到我选择的 div 中,但如果可以的话,我宁愿以“正常”的方式进行。
谢谢阅读 :)