我想用一个自定义类型块替换标准布局catalog.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?如果我添加一个具有相同“名称”和相同父级的块,将覆盖现有的具有相同名称的块吗?
答案 0 :(得分:2)
我将在这里回答你们的每一个疑问。
1。我是否可以使用我的自定义块替换默认块,如上所示?
你可以。您可以使用自己的块而不是上面代码的默认块
2。最好的方法是什么?
为此,我更喜欢使用local.xml
。 local.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将不会理解你引用它的哪个块,因此,magneto不会渲染块内的内容。所以确保它在后端定义。在上述情况下,为了正确处理您的阻止,Magento需要Namespace_Modulename_Block_Groupview
定义app/code/local/Namespace/Modulename/Block/Groupview.php
(其中Namespace_Modulename
代表您的自定义模块名称),
3。如果我添加一个具有相同&#34;名称&#34;和同一个父母一样,会覆盖现有的同名吗?
当然,您可以提供阻止默认阻止的名称。 在magento中,每个块都应具有唯一名称。为了遵守此规则,我们需要先删除默认块。这将允许我们在我们自己的块中使用该块名称。否则Magento 会以糟糕的方式行事。
注意:有两个适用于您的块的操作。它们是addToParentGroup
和setTitle
。第一个将您的块设置为detailed_info
组,第二个用于设置块的标题。
答案 1 :(得分: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>
我们只是为块的实例替换新模板,使所有内容保持相同的属性值,例如name
,as
和其他
来源:http://www.magentocommerce.com/design_guide/articles/intro-to-layouts#head-anatomy-of-a-layout