对方法的调用getChildHtml()
使用传递给方法的名称加载子块的 HTML,因此在本例中我们正在寻找名为的子块right.
为了确定在哪里找到这个子块,我们需要知道哪个块正在调用这个方法。我知道那个特别的电话getChildHtml()
方法在主页栏模板中显示为right是其中一列。所以看看page.xml
布局文件并搜索在其中找到方法调用的模板文件,您将发现如下内容:
<reference name="root">
<action method="setTemplate"><template>page/2columns-right.phtml</template></action>
<!-- Mark root page block that template is applied -->
<action method="setIsHandle"><applied>1</applied></action>
</reference>
使用<reference>
布局文件中的标签允许您更改目标块,并且<action>
标签允许您在正在使用的块内运行块方法。所以这一段布局将模板设置在root堵塞。由此我们知道,它是root阻止调用getChildHtml()
method.
接下来我们看看在哪里rootblock 是在布局中定义的,它位于相同的位置page.xml
布局文件,并且应该位于顶部附近:
<block type="page/html" name="root" output="toHtml" template="page/3columns.phtml">
...
<block type="core/text_list" name="right" as="right" translate="label">
<label>Right Column</label>
</block>
...
</block>
该块中定义了很多内容,但您可以看到它被赋予了名称root并定义了相当多的子块。这些子块之一被命名为right正是这个块的 HTML 正在由getChildHtml()
方法。重要的是要注意块类型 -core/text_list
。这是一种特殊的块类型,这意味着当使用getChildHtml()
方法,子块也将被渲染。如果块类型是page/html
与根块一样,每个子块都添加到right块需要它自己的getChildHtml()
方法调用,使用这种块类型,只需要调用getChildHtml('right')
并且所有子块也将被渲染。
正如你所看到的right此处定义了块,但它是空的。这是因为与引用根块的标签完全相同(<reference name="root">
)其他布局文件添加子块到right通过引用来阻止right block.
<reference name="right">
...
</reference>
因此,要最终回答您的问题(并希望在此过程中提供一些信息),您需要查看布局文件,而不是page.xml
供参考right块,在这里您将找到所有由getChildHtml()
方法调用。
您可以更改添加到的内容right块在您自己的模块布局文件中,或者local.xml
如果您不创建模块,则使用布局文件。我简要介绍了local.xml
我的答案中的布局文件here使用示例语法添加新块并删除其他布局文件中添加的块。