<! - ?php echo $ this ---> getChildHtml('right')的内容在哪里?&gt;

时间:2013-04-16 09:09:28

标签: magento content-management-system e-commerce

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

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

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

3 个答案:

答案 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>

您可以像这样在那里添加自定义块。