Dimungkinkan untuk mengubah jenis blok dalam tata letak XML?

13

Apakah mungkin untuk mengubah tipe blok dalam tata letak XML?

Saya tahu cara mengubah template menggunakan setTemplatemetode, tetapi saya mencoba mengubah tipe blok. Apakah ini mungkin?

Marty Wallace
sumber
tolong jelaskan secara rinci apa yang harus Anda ubah
Keyul Shah

Jawaban:

7

Mengubah tipe blok berarti mengubah kelas blok, jadi tidak, tapi ...

... Anda bisa saja menimpa blok:

  1. Temukan pegangan tata letak yang dipanggil nanti ATAU pastikan, bahwa Anda layout.xmldiproses setelah blok dibuat, misalnya dengan <depends>diCompany_Module.xml
  2. Cukup buat blok baru tipe lain dengan nama yang sama

Masalahnya adalah, ini menimpa blok dan tidak mengubah jenisnya. Ini berarti semua yang dilakukan pada blok ini antara kreasi dan perubahan Anda hilang.

Misalnya untuk mengubah 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
sumber
1
Anda juga dapat membuat kelas blok baru yang "mewarisi" kelas blok yang ingin Anda ganti. Anda perlu menambahkan entri di config.xml ekstensi khusus Anda untuk menukar kelas blok dengan milik Anda. Ini masuk akal jika Anda berencana untuk memperluas atau memodifikasi fungsionalitas blok.
Biagio Arobba
3

Anda tidak dapat mengubahnya di file tata letak afaik. Anda dapat, bagaimanapun, memperluas dan menimpanya di file konfigurasi Anda.

Contoh:

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

Ingatlah untuk memperpanjang blok asli.

smdev
sumber
1

Saya menghadapi masalah serupa yang perlu saya perbarui blok tertentu untuk tata letak tertentu.

Apa yang akhirnya saya lakukan dan tampaknya berhasil adalah (dalam file layout)

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

Semoga ini membantu.

Alvin Nguyen
sumber