0

我正在尝试将模板块添加到产品视图(仅限)产品详细信息页面中的页脚块中。我在 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">. 有人可以帮我解决这个问题吗?非常感激!

4

2 回答 2

1

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

页脚.phtml:

<?php echo $this->getChildHtml('uniqueName'); ?>
于 2012-11-01T23:11:56.467 回答
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')
于 2012-11-01T23:12:18.597 回答