我正在尝试重新组织我的右侧边栏。在模板(2columns-right)中,它调用:
<?php echo $this->getChildHtml('right') ?>
我在哪里可以找到这个变量的内容?
我正在尝试重新组织我的右侧边栏。在模板(2columns-right)中,它调用:
<?php echo $this->getChildHtml('right') ?>
我在哪里可以找到这个变量的内容?
对方法的调用会getChildHtml()
加载带有传递给方法的名称的子块的 HTML,因此在这种情况下,我们正在寻找一个名为right的子块。
为了确定在哪里可以找到这个子块,我们需要知道哪个块正在调用这个方法。我知道对该getChildHtml()
方法的特定调用出现在主页列模板中,因为右边是列之一。因此,查看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>
标签允许您在正在使用的块内运行块方法。所以这部分布局将模板设置在根块内。由此我们知道调用该方法的是根块。getChildHtml()
接下来让我们看看根块在布局中的定义位置,它在同一个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并定义了很多子块。这些子块之一被命名为正确的,并且该方法正在输出其 HTML 的该块getChildHtml()
。重要的是要注意块类型 - core/text_list
。这是一种特殊的块类型,这意味着当使用该getChildHtml()
方法渲染该块的 HTML 时,子块也将被渲染。如果块类型page/html
与根块一样,添加到正确块的每个子块都需要它自己的getChildHtml()
方法调用,使用这种块类型,您只需要调用getChildHtml('right')
并且所有子块也将被渲染。
如您所见,此处定义了正确的块,但它是空的。这是因为与引用根块 ( ) 的标记完全相同,<reference name="root">
其他布局文件通过引用右块将子块添加到右块。
<reference name="right">
...
</reference>
因此,要最终回答您的问题(并希望在此过程中提供一些信息),您需要查看布局文件而不是page.xml
对正确块的引用,在这里您将找到getChildHtml()
方法调用输出的所有子内容。
您可以在自己的模块布局文件中更改添加到右侧local.xml
块的内容,如果您不创建模块,则可以更改布局文件。我在这里local.xml
的答案中简要介绍了布局文件,其中包含添加新块和删除其他布局文件中添加的块的示例语法。
你会在你的 layout.xml 文件中找到一切的来源。它会有列表块,调用 .phtml 文件和数据来自那里。我希望你理解我想要传达的内容。
<reference name="right">
<block type="yourmodule/yourblock" name="yourblock" as="yourblock" />
</reference>
你可以像这样添加你的自定义块。