Magento布局:用另一个块替换块

4
我想用自定义类型块替换标准布局目录.xml中的一个块。
<block type="catalog/product_view_attributes" name="product.attributes" as="additional" template="catalog/product/view/attributes.phtml">
    <action method="addToParentGroup"><group>detailed_info</group></action>
    <action method="setTitle" translate="value"><value>Additional Information</value></action>
</block>

我想用我自己的自定义块类型替换上面的标准,但使用相同的“名称”。
<block type="attributesasgroup/groupview" name="product.attributes" as="additional" template="webguys/attributesasgroup/groupview.phtml">
    <action method="addToParentGroup"><group>detailed_info</group></action>
    <action method="setTitle" translate="value"><value>Additional Information</value></action>
</block>

有人能建议我最好的做法吗?我不知道要使用哪些XML操作和方法。我需要删除先前的块吗? unsetChild?如果我添加一个具有相同“名称”和相同父级的块,它会覆盖具有相同名称的现有块吗?

2个回答

2
我将在此解答您的疑问。
1. 是否可以像上面展示的那样使用自定义块替换默认块?
当然可以。您可以使用自己的块来替换默认块,使用以上代码即可。
2. 最佳实现方式是什么?
我更倾向于使用local.xmllocal.xml是一个特殊的布局文件,它始终由Magento最后处理。也就是说,通过此文件指定的布局更新将在所有其他布局更新文件考虑和应用之后才会被考虑和应用。因此,这是一种轻松修改任何布局更改的方法。所以,请将此文件包含在您的主题布局目录中,并进行指定的布局更改。
文件:app/design/frontend/<package>/<theme>/layout/local.xml
<catalog_product_view>

    <remove name="product.attributes" />

    <reference name="content">
        <block type="attributesasgroup/groupview" name="product.attributes" as="additional" template="webguys/attributesasgroup/groupview.phtml">
            <action method="addToParentGroup"><group>detailed_info</group></action>
            <action method="setTitle" translate="value"><value>Additional Information</value></action>
        </block>
    </reference>

</catalog_product_view>

我们的 local.xml 包含的布局非常简单。首先,它从布局结构中删除了默认块。为了使用它,我们使用了 remove 节点。然后,我们将自己的块添加到内容部分。
在这里,重要的是你的块应该在后端定义。如果没有定义,Magento 将不理解你引用的是哪个块,因此,Magento 将不会呈现你的块内的内容。所以请确保在后端定义。在上面的例子中,为了正确处理你的块,Magento 需要在 app/code/local/Namespace/Modulename/Block/Groupview.php 中定义 Namespace_Modulename_Block_Groupview(其中 Namespace_Modulename 代表你的自定义模块名称)。
当然,你可以给你的块一个默认块的名称。在 Magento 中,每个块都应该有一个唯一的名称。为了遵守这个规则,我们需要先删除默认块。这将允许我们在自己的块中使用该块名称。否则,Magento 将表现得很糟糕。
注意:有两个动作适用于你的块。它们是 addToParentGroupsetTitle。第一个将你的块设置为 detailed_info 组,第二个用于为你的块设置标题。

1

你的意思是像这样吗?

<reference name="product.attributes">

  <action method="setTemplate">

     <template>webguys/attributesasgroup/groupview.phtml</template>

   </action>

     <action method="addToParentGroup"><group>detailed_info</group></action>
    <action method="setTitle" translate="value"><value>Additional Information</value>

</reference>

我们只是替换了块实例的新模板,保持所有属性值不变,例如nameas等等。 来源: http://www.magentocommerce.com/design_guide/articles/intro-to-layouts#head-anatomy-of-a-layout

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接