È possibile cambiare il tipo di blocco nel layout XML?


13

È possibile cambiare un tipo di blocco nel layout XML?

So come cambiare il modello usando il setTemplatemetodo, ma sto cercando di cambiare il tipo di un blocco. È possibile?


per favore spiega in dettaglio cosa devi cambiare
Keyul Shah,

Risposte:


7

Cambiare il tipo di blocco significa cambiare la classe di blocco, quindi no, ma ...

... puoi semplicemente sovrascrivere il blocco:

  1. Trova un handle di layout che viene richiamato in seguito O assicurati che layout.xmlsia elaborato dopo la creazione del blocco, ad es. Con <depends>inCompany_Module.xml
  2. Basta creare un nuovo blocco di altro tipo con lo stesso nome

Il problema è che questo sovrascrive il blocco e non cambia il tipo. Ciò significa che tutto ciò che viene fatto in questo blocco tra la creazione e la modifica viene perso.

Ad esempio per modificare 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
È inoltre possibile creare una nuova classe di blocco che "eredita" la classe di blocco che si desidera sostituire. Dovrai aggiungere una voce nel file config.xml della tua estensione personalizzata per scambiare la classe di blocco con la tua. Ciò avrebbe senso se si prevede di estendere o modificare la funzionalità del blocco.
Biagio Arobba,

3

Non puoi cambiarlo nei file di layout afaik. È possibile, tuttavia, estenderli e sovrascriverli nei file di configurazione.

Esempio:

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

Ricorda di estendere il blocco originale.


1

Stavo affrontando un problema simile che ho bisogno di aggiornare un blocco specifico per un layout specifico.

Quello che finisco di fare e sembra funzionare è (nel file di layout)

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

Spero che sia di aiuto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.