可以更改布局XML中的块类型吗?


13

是否可以在布局XML中更改块类型?

我知道如何使用setTemplate方法更改模板,但是我正在尝试更改块的类型。这可能吗?


请详细说明您必须更改的内容
Keyul Shah 2014年

Answers:


7

更改块类型意味着更改块类,所以不可以,但是...

...您可以覆盖该块:

  1. 查找稍后调用的布局手柄或可以肯定,你layout.xml是在创建块后处理,例如<depends>Company_Module.xml
  2. 只需创建一个具有相同名称的其他类型的新块

问题是,这将覆盖块,并且不会更改类型。这意味着在创建和更改之间的此块上完成的所有操作都将丢失。

例如,更改catalog.navigation

<layout version="0.1.0">
    <catalog_category_default translate="label">
        <reference name="left">
            <block type="myModule/navigation" name="catalog.leftnav" after="currency" template="myModule/catalog/navigation/left.phtml"/>
        </reference>
    </catalog_category_default>
</layout>

1
您还可以创建一个新的块类,以“继承”您要替换的块类。您将需要在自定义扩展的config.xml中添加一个条目,以与您的块类交换。如果您打算扩展或修改块的功能,这将是有意义的。
Biagio Arobba'3

3

您无法在布局文件afaik中进行更改。但是,您可以在配置文件中扩展和覆盖它们。

例:

<config>
    <global>
        <blocks>
            <catalog>
                <rewrite><product_view>My_Custom_Block_Product_View</product_view></rewrite>
            </catalog>
        </blocks>
    </global>
</config>

记住要扩展原始块。


1

我面临类似的问题,我需要为特定的布局更新特定的块。

我最终要做的事似乎是可行的(在布局文件中)

<controller_x_y>
    <reference name="block_name_reference">
        <block type="mymodule/customblock" name="block_name_reference" />
    </reference>
</controller_x_y>

希望这可以帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.