关于php:Magento布局用另一个块替换块

Magento layout replace block with another block

我想用一个自定义类型的块替换标准布局catalog.xml中的一个块。

1
2
3
4
<block type="catalog/product_view_attributes" name="product.attributes" as="additional" template="catalog/product/view/attributes.phtml">
    <group>detailed_info</group></action>
    <value>Additional Information</value></action>
</block>

我想用下面的自定义块类型替换上述标准,但要使用相同的"名称"。

1
2
3
4
<block type="attributesasgroup/groupview" name="product.attributes" as="additional" template="webguys/attributesasgroup/groupview.phtml">
    <group>detailed_info</group></action>
    <value>Additional Information</value></action>
</block>

有人可以建议我这样做的最好方法吗?我不知道要使用的XML操作和方法。我需要删除上一个方块吗? unsetChild?如果我添加一个具有相同"名称"和相同父代的块,是否将覆盖具有相同名称的现有块?


在这里,我将解答您的每一个疑问。

1。是否可以用我的自定义块替换默认块,如上所示?

当然可以。您可以在上面的代码中使用自己的块而不是默认块

2。最好的方法是什么?

为此,我更喜欢使用local.xmllocal.xml是一个特殊的布局文件,Magento最终将始终对其进行处理。即,在考虑了所有其他布局更新文件之后,最终将考虑并应用通过此文件指定的布局更新。因此,这是更改任何布局更改的简便方法。因此,请使用指定的布局更改将此文件包含在主题的布局目录中。

文件:app/design/frontend/<package>/<theme>/layout/local.xml

1
2
3
4
5
6
7
8
9
10
11
12
<catalog_product_view>

    <remove name="product.attributes" />

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

</catalog_product_view>

local.xml的布局非常简单。首先,它从布局结构中删除默认块。为了使用它,我们为此使用了remove节点。然后,我们将自己的块添加到内容部分。

在这里重要的是,应在后端定义块。如果未定义,Magento将无法理解您所引用的块,因此,Magneto将不会在块内渲染内容。因此,请确保在后端中对其进行了定义。在上述情况下,为了正确处理您的块,Magento需要在app/code/local/Namespace/Modulename/Block/Groupview.php处定义Namespace_Modulename_Block_Groupview(其中Namespace_Modulename代表您的自定义模块名称)

3。如果我添加一个具有相同"名称"和相同父代的块,是否将覆盖具有相同名称的现有块?

当然,您可以为块指定默认块的名称。在magento中,每个块都应具有唯一的名称。为了遵守此规则,我们需要先删除默认块。这将使我们能够在自己的块中使用该块名称。否则,Magento的行为将不正确。

注意:有两个操作将应用于您的块。它们是addToParentGroupsetTitle。第一个将您的图块设置为detailed_info组,第二个用于将图块设置为标题。


你的意思是这样吗?

1
2
3
4
5
6
7
8
9
10
11
12
<reference name="product.attributes">

 

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

   </action>

     <group>detailed_info</group></action>
    <value>Additional Information</value>

</reference>

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

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