0

我有一个自定义块(选项卡式产品信息),我想在产品视图块本身的商店产品视图中显示它。我在 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?

4

2 回答 2

1

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

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

之所以这样,是因为 Magento afterbefore属性仅与已声明的块进行比较,并且我认为您的 local.xml 在原始 catalog.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>
于 2012-05-03T16:38:05.910 回答
0

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

echo $this->getChildHtml('info_tabs')

你应该很高兴。

于 2012-05-03T16:32:14.523 回答