9

我正在尝试重新组织我的右侧边栏。在模板(2columns-right)中,它调用:

<?php echo $this->getChildHtml('right') ?>

我在哪里可以找到这个变量的内容?

4

3 回答 3

22

对方法的调用会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的答案中简要介绍了布局文件,其中包含添加新块和删除其他布局文件中添加的块的示例语法。

于 2013-04-16T10:30:50.570 回答
1

你会在你的 layout.xml 文件中找到一切的来源。它会有列表块,调用 .phtml 文件和数据来自那里。我希望你理解我想要传达的内容。

于 2013-04-16T09:25:46.567 回答
0
<reference name="right">  
    <block type="yourmodule/yourblock" name="yourblock" as="yourblock" />
 </reference>

你可以像这样添加你的自定义块。

于 2013-04-16T10:08:50.500 回答