レイアウトXMLのブロックタイプを変更できますか?


13

レイアウトXMLでブロックタイプを変更することはできますか?

setTemplateメソッドを使用してテンプレートを変更する方法は知っていますが、ブロックのタイプを変更しようとしています。これは可能ですか?


変更する必要があるものを詳細に説明してください
Keyul Shah 14年

回答:


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にエントリを追加して、ブロッククラスを自分のものと交換する必要があります。ブロックの機能を拡張または変更する予定がある場合、これは理にかなっています。
ビアジオアロバ

3

layout-files afaikで変更することはできません。ただし、config-filesでそれらを拡張およびオーバーライドできます。

例:

<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>

お役に立てれば。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.