我正在尝试重新组织我的右侧边栏。在模板(2columns-right)中,它调用:
<?php echo $this->getChildHtml('right') ?>
我在哪里可以找到此变量的内容?
答案 0 :(得分:22)
对方法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 块中。据此我们知道调用getChildHtml()
方法的 root 块。
接下来让我们看一下在布局中定义 root 块的位置,它位于相同的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()
方法渲染此块的HTML时,也会渲染子块。如果块类型与根块类似page/html
,则添加到右块的每个子块都需要它自己的getChildHtml()
方法调用,使用此块类型,只有需要调用getChildHtml('right')
,所有子块也将被渲染。
正如您所见,右块在此处定义,但它是空的。这是因为与引用根块(<reference name="root">
)的标签完全相同的方式,其他布局文件通过引用右侧>> 块将子块添加到右侧块 block。
<reference name="right">
...
</reference>
因此,为了最终回答您的问题(并希望在此过程中提供一些信息),您需要查看page.xml
以外的布局文件,以获取对右侧块的引用,此处您将通过getChildHtml()
方法调用找到所有子内容输出。
您可以更改自己的模块布局文件中添加到右侧块的内容,或者如果您不创建模块,则更改local.xml
布局文件。我简要介绍了我的答案here中的local.xml
布局文件,其中包含示例语法,以添加新块并删除在其他布局文件中添加的块。
答案 1 :(得分:1)
你会在你的layout.xml文件中找到所有内容的来源。它会有一个列表块,在那里调用.phtml文件和数据来自那里。我希望你能理解我想传达的内容。
答案 2 :(得分:0)
<reference name="right">
<block type="yourmodule/yourblock" name="yourblock" as="yourblock" />
</reference>
您可以像这样在那里添加自定义块。