2

对于我正在处理的模块,我想在购物车屏幕中添加一个块,我想不显眼地做它,我想将它放在购物车内容下方和其他块之前(优惠券,运费估计,总数,...)。

我已经设法做到了不显眼的部分:观察者听controller_action_layout_load_before,如果FullNameActioncheckout_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"它,则在所有内容之后。简而言之,它没有考虑beforeafter考虑的内容。
查看 Magento 核心模块的 XML 布局文件,我意识到这些参数只在它们放置在其之后或之前的块位于右/左列内时才会出现beforeafter所以我的猜测是,这对那些专栏来说是特别的。

所以我的问题是,我可以在内容中指定我的块的位置吗?是的,怎么做?
另一种解决方案是异步加载块,因为我可以将 AJAX 调用的结果附加到我选择的 div 中,但如果可以的话,我宁愿以“正常”的方式进行。

谢谢阅读 :)

4

0 回答 0