Magento的.无需更改模板代码即可将块插入另一个

Yar*_*oza 9 php xml layout magento

我试图找到解决方案,但没有结果.我的任务是编写模块.它应该在现有块中插入一些html.

我注意到当我使用layout .xml文件时,我可以将我的块插入到某些引用中

<reference name="product.info">
    <block type='googlethis/link' name="googlethis" 
           template="catalog/product/googlethis.phtml"/>
</reference>
Run Code Online (Sandbox Code Playgroud)

我的街区也显示出来.

在其他情况下,我应该调用getChildHtml()方法,它不好,因为它使更改模板.phtml文件.

那么有没有办法将我的phtml块插入任何其他phtml块而不调用getChildHtml()

小智 21

有一种方法可以做到这一点,虽然它不是一个完全优雅的解决方案.它在大多数情况下都会起作用,并且偶尔也证明是有用的.

基本上,我们的想法是在布局XML中替换要在块之前/之后渲染块的块,将块作为子块放在块中,然后在它之前/之后渲染它的输出.

因此,假设您想要在购物车详细信息页面上的总计块之前输出一个块,您可以在扩展程序的layout.xml中执行以下操作

<checkout_cart_index>
    <reference name="checkout.cart">
        <block type="myextension/block" name="myextension.block" as="myextension_block" template="myextension/template.phtml">
            <action method="setChild"><name>totals</name><block>totals</block></action>
        </block>
        <action method="setChild"><name>totals</name><block>myextension.block</block></action>
    </reference>
</checkout_cart_index>
Run Code Online (Sandbox Code Playgroud)

然后在您的template.phtml文件中,您将拥有:

<div id="myextension">
    // Your template code
</div>

// Render the totals block that you placed inside your block
<?php echo $this->getChildHtml('totals'); ?>
Run Code Online (Sandbox Code Playgroud)

正如我所说,这不适合所有情况,并不是非常优雅,但确实有效.

乔恩