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

Urv*_*sha 9 magento content-management-system e-commerce

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

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

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

小智 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>
Run Code Online (Sandbox Code Playgroud)

使用<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>
Run Code Online (Sandbox Code Playgroud)

在这个块中有很多定义,但你可以看到它被赋予了名称root并定义了相当多的子块.其中一个子块被命名为right,正是这个块的HTML由该getChildHtml()方法输出.重要的是要注意块类型 - core/text_list.这是一种特殊的块类型,这意味着当使用该getChildHtml()方法渲染此块的HTML时,也会渲染子块.如果块类型page/html与根块类似,则添加到右侧块的每个子块都需要它自己的getChildHtml()方法调用,使用此块类型,您只需要调用,getChildHtml('right')并且还将呈现所有子块.

正如您所看到的,此处定义了正确的块,但它是空的.这是因为在完全相同的方式为您的有标签引用根块(<reference name="root">)等布局文件添加子块到通过引用块块.

<reference name="right">
    ...
</reference>
Run Code Online (Sandbox Code Playgroud)

因此,为了最终回答您的问题(并希望在此过程中提供一些信息),您需要查看布局文件而不是page.xml右侧块的引用,此处您将通过getChildHtml()方法调用找到所有子内容输出.

如果不创建模块,可以更改自己的模块布局文件或布局文件中添加到右侧块的内容local.xml.我local.xml这里简要介绍了我的答案中的布局文件,其中包含示例语法,用于添加新块并删除在其他布局文件中添加的块.


Chi*_*007 1

您将在您的layout.xml 文件中找到所有内容的来源。它将有列表块,在这些块下调用.phtml 文件和数据来自那里。我希望您理解我想要传达的内容。

  • 布局.xml == 目录.xml?@chiragit007 (2认同)