首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >理解Magento中的getChildHtml

理解Magento中的getChildHtml
EN

Stack Overflow用户
提问于 2013-10-21 15:51:46
回答 1查看 100.3K关注 0票数 63

从以下两列中的行-right.phtml

代码语言:javascript
复制
<div class="col-main">
    <?php echo $this->getChildHtml('global_messages') ?>
    <?php echo $this->getChildHtml('content') ?>
</div>

我无法理解<?php echo $this->getChildHtml('content') ?>中的content是从哪里来的。

通过<?php echo $this->getChildHtml('content') ?>调用哪个.phtml文件来显示数据

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-15 03:17:57

如果我们讨论的是网站的前端,你所问的那一行……

代码语言:javascript
复制
<?php echo $this->getChildHtml('content') ?>

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

代码语言:javascript
复制
<block type="core/text_list" name="content" as="content" translate="label">
    <label>Main Content Area</label>
</block>

通过查看这个块标记的"type“属性,我们可以知道布局的这一部分是什么对象类。它来自"Core“模块,并且是块类型的文本列表。此Mage_Core_Block_Text_List的类名。(app/code/core/Mage/Core/Block/Text/List.php).文本列表是简单的块容器,其目的是在其中存储额外的子块。您可以将任意数量的子块添加到文本列表中,这些子块将按照添加顺序或分配顺序进行渲染。

因此,为了回答您的问题,没有视图脚本(.phtml文件)来呈现$this->getChildHtml('content').的内容已添加到此块中的块本身可能有与之关联的视图脚本。要找出这些是什么视图脚本,您必须找到添加了块的布局XML。

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

代码语言:javascript
复制
<?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将按以下顺序在以下位置查找视图脚本:

代码语言:javascript
复制
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 (默认日志文件设置)中记录一个错误,指出未找到视图脚本。不会发生块的输出。

请注意,根据您在System -> Configuration -> (常规)设计中的设置,Magento可能会查看其他package/theme位置。还存在其他情况,例如,如果单个CMS页面、目录类别或目录产品的“自定义主题”字段被更改,则这些单个模型的视图页面可能有一个附加的视图脚本位置(该位置将与所选主题匹配),该位置优先于站点的默认设置。

Magento在查找翻译文件和布局XML文件时将遵循相同的后备逻辑。

请注意,从app/design/frontend/base/default/template/复制单独的视图脚本(避免复制整个目录,只复制您实际打算修改的视图脚本)到您的本地主题,并为您的网站主题自定义它们是完全可以接受的。然而,为了有一个升级兼容的网站,布局文件不应该从基础复制到您的本地主题。这样做并不遵循升级兼容的做法。相反,主题的XML布局更新应该包含在app/design/frontend/PACKAGE_NAME/THEME_NAME/layout/local.xml中。在local.xml中,没有来自app/design/frontend/base/default/layout/*的布局指令,这些指令不能通过适当的local.xml指令删除/添加/更改。

票数 156
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19488885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档