了解Magento中的getChildHtml

时间:2013-10-21 07:51:46

标签: php html magento

来自2columns-right.phtml

中的以下一行
<div class="col-main">
    <?php echo $this->getChildHtml('global_messages') ?>
    <?php echo $this->getChildHtml('content') ?>
</div>

我无法理解,<?php echo $this->getChildHtml('content') ?>的内容即将来临。

调用witch .phtml文件以按<?php echo $this->getChildHtml('content') ?>

显示数据

1 个答案:

答案 0 :(得分:150)

如果我们正在讨论网站的前端,那就是您询问的特定行......

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

添加到app / design / frontend / base / default / layout / page.xml中的Magento布局XML中。在Magento 1.8版本中,您将在第92-94行中找到它。

<block type="core/text_list" name="content" as="content" translate="label">
    <label>Main Content Area</label>
</block>

通过查看此块标记的“type”属性,我们可以知道布局的这一部分是什么对象类。它来自“核心”模块,属于块类型文本列表。此Mage_Core_Block_Text_List的类名。 (应用程序/代码/核心/法师/核心/砌块/文本/ list.php的)。文本列表只是块容器,其目的是在其中存储其他子块。您可以在文本列表中添加任意数量的子块,它们将按照添加顺序或已分配的顺序呈现出来。

所以,为了回答你的问题,没有视图脚本(.phtml文件)呈现$ this-&gt; getChildHtml('content')的内容。已经<的块em>添加到这个块,可能自己有与它们相关的视图脚本。要找出那些视图脚本,你必须找到添加了块的布局XML。

例如,如果我将以下布局文件添加到我网站主题的前端:

<?xml version="1.0"?>
<layout>
    <default>
        <reference name="content">
            <block type="core/template" name="my_view_script" template="hello/world.phtml" />
        </reference>
    </default>
</layout>

上面的代码,会将具有对象类Mage_Core_Block_Template的块添加到名为“content”的块中(恰好是您询问的那个)。然后,Magento将按以下顺序在以下位置查找视图脚本:

app/design/frontend/PACKAGE_NAME/THEME_NAME/template/hello/world.phtml
app/design/frontend/PACKAGE_NAME/default/template/hello/world.phtml
app/design/frontend/base/default/template/hello/world.phtml

找到的第一个是它将使用的那个。如果未找到视图脚本,Magento将在var/logs/system.log(默认日志文件设置)中记录错误,指出未找到视图脚本。不会发生阻止输出。

请注意,根据您在系统中的设置 - &gt;配置 - &gt; (常规)设计,Magento可能会查看其他package/theme个位置。还有其他方案,例如,如果针对各个CMS页面,目录类别或目录产品更改了“自定义主题”字段,这些单个模型的视图页面可能有一个额外的视图脚本位置(将与所选主题匹配),该位置优先于您站点的默认设置。

Magento在查找翻译文件以及布局XML文件时将遵循相同的回退逻辑。

请注意,复制单个视图脚本(避免复制整个目录,仅复制您实际打算修改的视图脚本)从app/design/frontend/base/default/template/到您的本地主题完全可以接受,并为此目的自定义它们你网站的主题。但是,为了使升级兼容​​的站点,不应将布局文件从基本复制到本地主题。这样做,不遵循升级兼容的做法。相反,您的主题的XML布局更新应包含在app/design/frontend/PACKAGE_NAME/THEME_NAME/layout/local.xml中。 app/design/frontend/base/default/layout/*没有布局指令,无法使用local.xml中的正确XML指令删除/添加/更改,有什么用。