Möglich, den Blocktyp in Layout-XML zu ändern?

13

Ist es möglich, einen Blocktyp in Layout-XML zu ändern?

Ich weiß, wie man eine Vorlage mit der setTemplateMethode ändert , aber ich versuche, den Typ eines Blocks zu ändern. Ist das möglich?

Marty Wallace
quelle
Bitte erläutern Sie im Detail, was Sie ändern müssen
Keyul Shah

Antworten:

7

Wenn Sie den Blocktyp ändern, müssen Sie die Blockklasse ändern. Nein, aber ...

... Sie können den Block einfach überschreiben:

  1. Suchen Sie ein Layout-Handle, das später aufgerufen wird, ODER stellen Sie sicher, dass Ihr layout.xml nach dem Erstellen des Blocks verarbeitet wird, z. B. mit <depends>inCompany_Module.xml
  2. Erstellen Sie einfach einen neuen Block eines anderen Typs mit demselben Namen

Das Problem ist, dass dies den Block überschreibt und den Typ nicht ändert. Dies bedeutet, dass alles, was in diesem Block zwischen der Erstellung und Ihrer Änderung getan wird, verloren geht.

Zum Beispiel zum Ändern der 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>
Fabian Blechschmidt
quelle
1
Sie können auch eine neue Blockklasse erstellen, die die zu ersetzende Blockklasse "erbt". Sie müssen einen Eintrag in der config.xml Ihrer benutzerdefinierten Erweiterung hinzufügen, um die Blockklasse mit Ihrer auszutauschen. Dies ist sinnvoll, wenn Sie die Funktionalität des Blocks erweitern oder ändern möchten.
Biagio Arobba
3

Sie können es nicht in den Layout-Dateien afaik ändern. Sie können sie jedoch in Ihren Konfigurationsdateien erweitern und überschreiben.

Beispiel:

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

Denken Sie daran, den ursprünglichen Block zu erweitern.

smdev
quelle
1

Ich hatte ein ähnliches Problem, bei dem ich einen bestimmten Block für ein bestimmtes Layout aktualisieren muss.

Was ich am Ende mache und es scheint zu funktionieren, ist (in der Layoutdatei)

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

Hoffe das hilft.

Alvin Nguyen
quelle