Possible de changer le type de bloc dans la mise en page XML?

13

Est-il possible de changer un type de bloc en XML de mise en page?

Je sais comment changer de modèle en utilisant la setTemplateméthode, mais j'essaie de changer le type d'un bloc. Est-ce possible?

Marty Wallace
la source
veuillez expliquer en détail ce que vous devez changer
Keyul Shah

Réponses:

7

Changer le type de bloc signifie changer la classe de bloc, donc non, mais ...

... vous pouvez simplement écraser le bloc:

  1. Trouvez une poignée de mise en page qui sera invoquée ultérieurement OU assurez-vous que votre layout.xmlest traité après la création du bloc, par exemple avec <depends>inCompany_Module.xml
  2. Créez simplement un nouveau bloc d'un autre type avec le même nom

Le problème est que cela écrase le bloc et ne change pas le type. Cela signifie que tout ce qui est fait sur ce bloc entre la création et votre modification est perdu.

Par exemple pour changer le 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
la source
1
Vous pouvez également créer une nouvelle classe de blocs qui "hérite" de la classe de blocs que vous cherchez à remplacer. Vous devrez ajouter une entrée dans le config.xml de votre extension personnalisée pour échanger la classe de bloc avec la vôtre. Cela aurait du sens si vous envisagez d'étendre ou de modifier la fonctionnalité du bloc.
Biagio Arobba
3

Vous ne pouvez pas le changer dans les fichiers de mise en page afaik. Vous pouvez cependant les étendre et les remplacer dans vos fichiers de configuration.

Exemple:

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

N'oubliez pas d'étendre le bloc d'origine.

smdev
la source
1

J'étais confronté à un problème similaire dont j'ai besoin pour mettre à jour un bloc spécifique pour une mise en page spécifique.

Ce que je finis par faire et ça semble marcher (dans le fichier de mise en page)

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

J'espère que cela t'aides.

Alvin Nguyen
la source