了解Magento中的getChildHtml [英] Understanding getChildHtml in Magento

查看:172
本文介绍了了解Magento中的getChildHtml的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

从2columns-right.phtml中的以下行开始:
$ b

 < div class = COL-主> 
<?php echo $ this-> getChildHtml('global_messages')?>
<?php echo $ this-> getChildHtml('content')?>
< / div>

我无法理解,从< ?php echo $ this-> getChildHtml('content')?> 即将到来。



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

解决方案

如果我们正在讨论网站的前端,您已经询问了特定的行....

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

被添加到app / design / frontend / base / default / layout /页面中的Magento布局XML中.XML。在Magento 1.8版本中,你会发现它定义在92-94行。

 < block type =core / text_list name =contentas =contenttranslate =label> 
< label>主内容区域< / label>
< / block>

通过查看这个块标记的type属性,我们可以知道这个段的对象类的布局是。它来自核心模块,并且是块类型文本列表。这个Mage_Core_Block_Text_List的类名。 (应用程序/代码/核心/法师/核心/砌块/文本/ list.php的)。文本列表只是块容器,其目的是在其中存储额外的子块。您可以将任意数量的子块添加到文本列表中,它们将按照它们添加的顺序或分配的顺序进行渲染。因此,要回答你的问题,没有视图脚本(.phtml文件)呈现$ this-> getChildHtml('content')的内容。已添加到这个块的块本身可能有与之关联的视图脚本。要找出这些视图脚本是什么,您必须找到添加了该块的布局XML。



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

 <?xml version =1.0?> 
< layout>
<默认值>
< reference name =content>
< / reference>
< / default>
< / layout>

上面的代码会将带有Mage_Core_Block_Template对象类的块添加到名为'内容(这恰好是你问的内容)。然后,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会查找。还有其他一些情况,例如,如果单个CMS模式的视图中单独的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指令。


From the following line in 2columns-right.phtml

<div class="col-main">
    <?php echo $this->getChildHtml('global_messages') ?>
    <?php echo $this->getChildHtml('content') ?>
</div>

I am not able to understand that, from where the content of <?php echo $this->getChildHtml('content') ?> is coming.

witch .phtml file is called to display the data by <?php echo $this->getChildHtml('content') ?>

解决方案

If we're discussing the frontend of the website, the particular line you've asked about....

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

is added to the Magento layout XML in app/design/frontend/base/default/layout/page.xml. In Magento version 1.8, you'll find it defined in lines 92-94.

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

By looking at the "type" attribute of this block tag, we can know what object class this section of the layout is. It comes from the "Core" module, and is of the block type Text List. The class name for this Mage_Core_Block_Text_List. (app/code/core/Mage/Core/Block/Text/List.php). Text Lists are simply block containers which purpose is to store additional child blocks inside them. You can add any number of child blocks to the text list and they will be rendered out either in the order they were added or the order they've been assigned.

So, to answer your question, there is no view script (.phtml file) that renders the contents of $this->getChildHtml('content'). The blocks which have been added to this block, may themselves have view scripts associated with them. To find out what view scripts those are, you'd have to find the layout XML which has added the block.

For example, if I had the following layout file added to the frontend of my website's theme:

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

The code above, would add the block with an object class of Mage_Core_Block_Template to the block with the name 'content' (which happens to be the one you asked about). Magento will then look for the view script in the following locations, in this order:

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

First one that is found, is the one it will use. If no view script is found Magento will log an error in var/logs/system.log (default log file setting) stating that the view script was not found. No output from the block will occur.

Note that depending on your settings in System -> Configuration -> (General) Design, there may be additional package/theme locations Magento will look in. There are also other scenarios such as if the "Custom Theme" is field is changed for individual CMS Pages, Catalog Categories, or Catalog Products, these individual model's view page may have an additional view script location (that will match the selected theme) that takes precedence over your site's default settings.

Magento will follow this same fallback logic when looking for translation files as well as layout XML files.

Please note, that it is perfectly acceptable to copy individual view scripts (avoid copying entire directories, copy over only view scripts you actually intend to modify) from app/design/frontend/base/default/template/ to your local theme, and customize them for the purposes of your website's theme. However, in order to have an upgrade compatible site, layout files should not be copied from base to your local theme. Doing so, does not follow upgrade compatible practices. Instead, XML Layout updates for your theme should be contained in app/design/frontend/PACKAGE_NAME/THEME_NAME/layout/local.xml. There is no layout instructions from app/design/frontend/base/default/layout/*, that cannot be removed/added-to/changed, what-have-you, with the proper XML instructions in local.xml.

这篇关于了解Magento中的getChildHtml的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆