Magento布局用另一个块替换块

时间:2014-08-19 03:29:54

标签: php magento layout

我想用一个自定义类型块替换标准布局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?如果我添加一个具有相同“名称”和相同父级的块,将覆盖现有的具有相同名称的块吗?

2 个答案:

答案 0 :(得分: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将不会理解你引用它的哪个块,因此,magneto不会渲染块内的内容。所以确保它在后端定义。在上述情况下,为了正确处理您的阻止,Magento需要Namespace_Modulename_Block_Groupview定义app/code/local/Namespace/Modulename/Block/Groupview.php(其中Namespace_Modulename代表您的自定义模块名称),

3。如果我添加一个具有相同&#34;名称&#34;和同一个父母一样,会覆盖现有的同名吗?

当然,您可以提供阻止默认阻止的名称。 在magento中,每个块都应具有唯一名称。为了遵守此规则,我们需要先删除默认块。这将允许我们在我们自己的块中使用该块名称。否则Magento 会以糟糕的方式行事

注意:有两个适用于您的块的操作。它们是addToParentGroupsetTitle。第一个将您的块设置为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>

我们只是为块的实例替换新模板,使所有内容保持相同的属性值,例如nameas和其他

来源http://www.magentocommerce.com/design_guide/articles/intro-to-layouts#head-anatomy-of-a-layout