Magento - 如何创建一个getChildHtml块并在另一个块中调用它

时间:2015-03-30 14:27:11

标签: magento templates layout

目前我正在努力重新设计自定义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做一些事情,但我不知道是什么。

你能帮我解决这个谜吗?

提前致谢!

2 个答案:

答案 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