目前我正在努力重新设计自定义Magento模板。
我遇到了以下问题。
在名为:2columns-left.phtml的文件中,我多次面对这样的代码:
<?php echo $this->getChildHtml('global_messages') ?>
或
<?php echo $this->getChildHtml('global_messages') ?>
这些代码行让我觉得他们通过获取.phtml文件的名称来调用块及其中的内容。
所以我有一个名为slider_layred_nav.phtml
的文件,我想在文件2columns-left.phtml
中调用其中的所有内容,所以我尝试了这段代码:
所以在文件2columns-left.phtml
中我放了:
<?php echo $this->getChildHtml('slider_layred_nav') ?>
但它只是没有显示任何内容。
我认为我必须对layout
做一些事情,但我不知道是什么。
你能帮我解决这个谜吗?
提前致谢!
答案 0 :(得分:3)
我猜你在理解magento布局以及如何在模板文件中呈现块时遇到一些问题。
简单来说,getChildHtml()
呈现该特定块内的所有块,即该父块的子块。如果使用getChildHtml('slider_layred_nav')
,它将呈现名为 slider_layred_nav 不是模板文件。
此处 $ this 具有自己的含义。它指的是具有模板文件2columns-left.phtml
的块。
首先,您必须在块内创建一个使用模板2columns-left.phtml
例如:
<block type="core/template" name="slider_layred_nav" template="something/slider_layred_nav.phtml"/>
在使用模板2columns-left.phtml
的块内创建此块后,您可以echo $this->getChildHtml('slider_layred_nav');
在2columns-left.phtml文件中显示该块。
希望我在某种程度上让你明白。
答案 1 :(得分:0)
你确实错过了布局部分。
如果您打开page.xml(在主题的布局文件夹下),您可以找到块 global_messages 的定义,如下所示:
<block type="core/messages" name="global_messages" as="global_messages"/>
但请不要将该块作为示例,因为它是一个特殊的块,没有与之关联的模板。
制作你想要的更干净的方式是这样的:
在in app / design / frontend / your_package / your_theme / layout( nota :your_package&amp; your_theme会有所不同)下创建 local.xml 文件。 然后将其粘贴到新的 local.xml 文件中:
<?xml version="1.0"?>
<layout version="0.1.0"><!-- everything goes in here -->
<default>
<block type="core/template" name="slider_layred_nav" template="path/to/slider_layred_nav.phtml"/>
</default>
</layout>
从p / app / frontend / your_package / your_theme / template / $this->getChildHtml('some_name')时,作为参数传递的名称的块的 name 属性中的slider_layred_nav 。