为模块动态添加模板块到另一个块

时间:2012-11-01 22:45:34

标签: magento magento-layout-xml

我正在尝试在产品视图(仅限),产品详细信息页面中将模板块添加到我的页脚块。我在catalog.xml布局文件中尝试了以下内容,但没有运气:

<catalog_product_view translate="label">
  ...
  <reference name="footer">
      <block type="core/template" name="uniqueName" template="catalog/product/mytemplate.phtml" />
  </reference>
</catalog_product_view>

<catalog_product_view translate="label">
  ...
  <reference name="footer">
      <block type="core/template" name="uniqueName">
          <action method="setTemplate"><template>catalog/product/mytemplate.phtml</template></action>
      </block>
  </reference>
</catalog_product_view>

我能够以同样的方式content使用后一种方法将模板块放入<reference name="content">块中,所以我不明白为什么这不起作用。好像我没有正确引用页脚..我在page.xml文件中看到创建的页脚添加为<block type="page/html_footer" name="footer" as="footer" template="page/html/footer.phtml">。有人可以帮我解决这个问题吗?非常感谢!

2 个答案:

答案 0 :(得分:1)

您需要确保您尝试添加块的块模板(在我的情况下为页脚块)调用您在布局xml中添加的子块。

footer.phtml:

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

答案 1 :(得分:1)

page.xml中,查看实例化content块对象的布局更新xml片段

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

content阻止是core/text_list阻止。 core/text_list块自动呈现其子块(即它们是文本块列表的包含块)。 core/text_list别名解析为Mage_Core_Block_Text_List,请查看此类呈现方法,了解为何将内容添加到内容块中。

现在,看一下实例化页脚块的布局更新XML片段。

<block type="page/html_footer" name="footer" as="footer" template="page/html/footer.phtml">

脚块文本列表块。这是一个page/html_footer块,它是一个模板块。您可以通过查看page/html_footer块继承自

的类来确定这一点
class Mage_Page_Block_Html_Footer extends Mage_Core_Block_Template

模板块会自动呈现其所有子块。相反,在块的模板中,您必须通过调用

显式呈现子项
echo $this->getChildHtml('block_name'); 

所以当你说

<reference name="footer">
     <block type="core/template" name="uniqueName" template="catalog/product/mytemplate.phtml" />
</reference>

你告诉Magento将一个名为uniqueName的块作为footer块的子块插入。但是,为了渲染块,页脚的模板必须调用

$this->getChildHtml('uniqueName')