【问题标题】:Magento - How to create a getChildHtml block and call it in anotherMagento - 如何创建一个 getChildHtml 块并在另一个中调用它
【发布时间】:2015-06-03 14:59:18
【问题描述】:

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

你能帮我解开这个谜吗?

提前致谢!

【问题讨论】:

    标签: magento templates layout


    【解决方案1】:

    我猜你在理解 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-&gt;getChildHtml('slider_layred_nav'); 以在您的2columns-left.phtml 文件中显示该块。

    希望我在某种程度上让你明白了。

    【讨论】:

      【解决方案2】:

      您确实缺少布局部分。

      如果你打开 page.xml(在你的主题的 layout 文件夹下),你可以找到块 global_messages 的定义,如下所示:

      <block type="core/messages" name="global_messages" as="global_messages"/>
      

      但不要以那个块为例,因为它是一个特殊的块,没有与之关联的模板。

      制作你想要的东西的更简洁的方法是这样的:

      在 app/design/frontend/your_package/your_theme/layout 下创​​建一个 local.xml 文件(注意:your_package 和 your_theme 会有所不同)。 然后将这个粘贴到新的 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>
      

      path/to/slider_layred_nav.phtml 是从 app/design/frontend/your_package/your_theme/template/ 到您的 phtml 的路径

      slider_layred_nav 在块的 name 属性中是您调用 $this-&gt;getChildHtml('some_name') 时作为参数传递的名称。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-21
        • 2012-07-18
        • 1970-01-01
        • 1970-01-01
        • 2021-02-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多