getChildHtml('right') ?> 的内容在哪里

2023-11-21

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

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

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


对方法的调用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使用示例语法添加新块并删除其他布局文件中添加的块。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

getChildHtml('right') ?> 的内容在哪里 的相关文章

随机推荐