添加到Magento中的local.xml时,不会显示自定义块

时间:2012-05-03 15:39:30

标签: xml magento layout block

我有一个自定义块(选项卡式产品信息),我希望在产品视图块本身的商店产品视图中显示该块。我在view.phtml中正确调用了块,并使用此代码将块添加到我的XML中:

<block type="catalog/product_view_tabs" name="product.info.tabs" as="info_tabs" template="catalog/product/view/tabs.phtml" >

当放入catalog.xml时会呈现块,但每当我以

的形式将其放入local.xml时
<catalog_product_view translate="label">
 <label>Catalog Product View (Any)</label>
   <reference name="content">
    <block type="catalog/product_view_tabs" name="product.info.tabs" as="info_tabs" template="catalog/product/view/tabs.phtml" >
   </reference>
</catalog_product_view>

它不起作用。当我将before或after标记(例如after =“product.info.media”)添加到local.xml中的代码片段时,它会被渲染但不在整个产品视图块之前或之后,但不在其中。在catalog.xml中,我只是把它放在其他块之间,它工作正常。

当我将整个产品视图部分的内容从catalog.xml复制到我的local.xml时,它可以工作,但所有内容(图像,描述等)都会显示两次。

有没有办法通过local.xml做到这一点?也许是通过setchild?

2 个答案:

答案 0 :(得分:1)

当你谈到local.xml时,你在谈论 /app/etc/local.xml 吗?此文件是配置文件,而不是布局更新文件。它并不打算像那样工作。

如果您正在谈论另一个布局文件(在app / design /&lt; package&gt; /&lt; theme&gt; /layout/local.xml中),那么您必须添加模块的依赖关系将此布局更新文件声明为声明页面原始内容的模块(在您的情况下为Mage_Catalog)。

这就是因为,之后的或之后的Magento 仅与已经声明的块进行比较,我认为在原始catalog.xml之前解析了local.xml

假设您有一个名为StackOverflow_Local的模块,该模块在其config.xml(app / code / local / StackOverflow / Local / etc / config.xml)中有此声明:

<config>
  <frontend>
    <layout>
      <updates>
        <stackoverflow_local>
          <file>local.xml</file>
        </stackoverflow_local>
      </updates>
    </layout>
  </frontend>
</config>  

然后你应该在app / etc / modules / StackOverflow_Local.xml中声明你的模块,在那里你应该找到这样的东西:

<?xml version="1.0"?>
<config>
  <modules>
    <StackOverflow_Local>
      <active>true</active>
      <codePool>local</codePool>
    </StackOverflow_Local>
  </modules>
</config>

要添加依赖项(如果禁用/删除Mage_Catalog,则模块不起作用)将激活XML转换为:

<?xml version="1.0"?>
<config>
  <modules>
    <StackOverflow_Local>
      <active>true</active>
      <codePool>local</codePool>
      <depends>
        <Mage_Catalog />
      </depends>
    </StackOverflow_Local>
  </modules>
</config>

答案 1 :(得分:0)

您正在将该块添加到内容块。将您的reference 名称值更新为 product.info 。根据您的 info_tabs 别名,只要您的模板有

echo $this->getChildHtml('info_tabs')

你应该好好去。