对于我正在处理的模块,我想在购物车屏幕中添加一个块,我想不引人注意地做,我想将它放在购物车内容之下和其他块之前(优惠券,运费估算,总计,......)。
我设法做了不显眼的部分:观察者听取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
的那些参数仅在它们放置在右侧/左侧列之后的块之后出现。所以我的猜测是这些列特别重要。
所以我的问题是,我可以在内容中指定我的块的位置吗?是的,怎么样?
另一个解决方案是异步加载块,因为我可以将我选择的div附加到AJAX调用的结果,但是如果可以的话,我宁愿以“正常”方式执行它。
感谢阅读:)