从 2columns-right.phtml 中的以下行
<div class="col-main">
<?php echo $this->getChildHtml('global_messages') ?>
<?php echo $this->getChildHtml('content') ?>
</div>
我无法理解<?php echo $this->getChildHtml('content') ?>
content
是从哪里来的。
调用哪个 .phtml 文件来按<?php echo $this->getChildHtml('content') ?>
显示数据?
如果我们讨论的是网站的前端,你问过的特定行......
<?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的类名。(app/code/core/Mage/Core/Block/Text/List.php)。文本列表只是块容器,其目的是在其中存储额外的子块。您可以将任意数量的子块添加到文本列表中,它们将按照添加顺序或分配顺序呈现。
因此,要回答您的问题,没有视图脚本(.phtml文件)可以呈现$this->getChildHtml('content')的内容。已添加到此块的块本身可能具有与之关联的视图脚本。要找出这些视图脚本是什么,您必须找到添加了块的布局 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
(默认日志文件设置)中记录一个错误,指出未找到视图脚本。块不会产生任何输出。
请注意,根据您在系统->配置->(常规)设计中的设置,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/*
的布局指令,无法删除/添加/更改,您有什么,在本地.xml中具有正确的XML指令。