您需要两件事来仅使用您自己的布局插入一个块并将该块输出到页面中。
首先,您需要您的布局将您的块插入具有该type="core/text_list"
属性的现有块 - 或扩展Mage_Core_Block_Text_List
类的块。块的示例core/text_list
包括 left、right、content、before_body_end 等。
其次,您需要分配给该块的模板以包含此调用:
echo $this->getChildHtml();
//note that there is no block alias parameter passed in to this function
在没有块别名的情况下调用getChildHtml()
将按顺序输出所有子块。如果你的块是这个布局的子块,那么它也会被输出。
我假设您的模块有自己的布局文件链接自它的etc/config.xml
,在这种情况下,您可以尝试添加此布局更新:
<default><!-- On all pages -->
<reference name="content"><!-- in the content (middle) column -->
<block type="your_module/your_block" name="my.test.module" template="your/template/path.phtml" before="-" /><!-- insert your block -->
</reference>
</default>
一旦你看到这是有效的,你就可以开始挖掘默认布局来找到你可以插入的块。
注意before="-"
属性。这会导致该块在该容器中的所有其他块之前插入。您还可以使用before="block.alias"
将块定位在列表中的特定块之前,并将after="block.alias"
其定位在特定块之后。你可以写信after="-"
把你的块放在列表的底部。
这里有一个Magento 布局系统的简单介绍。
如果您计划分发您的模块,您会发现大多数人已经修改和自定义了您要修改的页面的模板、布局或两者,并且您的非侵入性方法将不起作用,您将不得不,或者,修改和覆盖核心模板,使用布局将块的模板更改为您自己修改过的模板(不使用文件系统覆盖文件),或者指导最终用户如何将正确的echo
命令添加到他们现有的模板中。
相反,我建议采用这种方法:
将新模板添加到模块的模板文件夹中,这些模板是从基本/默认或默认/默认模板修改的,足以使您的模块在这些主题中工作。
将自定义布局添加到您的模块,在安装时进行这些更改 - 覆盖您需要在布局中修改的块的模板:
<checkout_cart_index><!-- on the cart page -->
<reference name="checkout.cart"><!-- in the cart block -->
<action method="setTemplate"><!-- change the block's template -->
<template>path/to/your/modified/template.phtml</template>
</action>
</reference>
</checkout_cart_index>
echo $this->getChildHtml('your.block.alias');
您还应该提供有关如何通过在必要时添加来将您的更改集成到第三方模板的文档。
自定义主题的人必须接受他们必须自定义其他功能或调整现有更改才能在主题中使用它们。