Setiap blok, atau kelompok blok dinyatakan dalam config.xml
file modul seperti ini (di dalam <global>
tag).
Ini adalah contoh dari modul katalog
<blocks><!-- marks definition of a block group -->
<catalog><!-- unique alias for blocks in the module -->
<class>Mage_Catalog_Block</class><!-- class prefix for all blocks -->
</catalog>
</blocks>
Ini berarti bahwa blok dapat dipakai menggunakan alias di catalog/class_name_here
mana class_name_here
sisa jalur kelas dimulai dari awalan.
Ini berarti catalog/class_name_here
akan dipetakan secara default ke Mage_Catalog_Block_Class_Name_Here
.
Untuk menulis ulang blok, Anda perlu membuat modul yang tergantung pada modul yang Anda coba ubah ( Magento_Catalog
) dalam contoh saya.
Dan Anda perlu menambahkan ini di config.xml
bawah <global>
tag.
<blocks>
<catalog><!-- alias of the block group you are rewriting -->
<rewrite><!-- reserved tag: specify that you are rewriting something -->
<class_name_here>YourNamespace_YourModule_Block_Your_New_Class_Here</class_name_here> <!-- tag: the rest of the alias of the class you are rewriting. value: the name of your class that rewrites the core class -->
</rewrite>
</catalog>
</blocks>
Kemudian buat kelas YourNamespace_YourModule_Block_Your_New_Class_Here
(mengikuti struktur folder ZF) dan membuat kelas ini memperluas kelas asli.
class YourNamespace_YourModule_Block_Your_New_Class_Here extends Mage_Catalog_Block_Class_Name_Here
{
//your awesome code here
}
Setelah selesai, nonaktifkan kompilasi dan aktifkan lagi (jika perlu) dan kosongkan cache.
Ini tidak akan berfungsi untuk blok abstrak.
Ini hanya berfungsi untuk kelas yang akan dipakai.
Contoh
Mari kita asumsikan bahwa Anda ingin menulis ulang aplikasi file \ code \ core \ Mage \ Catalog \ Block \ Product \ View \ Options \ Type \ Select.php yang memiliki kelas Mage_Catalog_Block_Product_View_Options_Type_Select
dalam modul Anda sendiri Marius_Test .
Maka Anda akan membutuhkan entri ini di config.xml
:
<blocks>
<catalog>
<rewrite>
<product_view_options_type_select>Marius_Test_Block_Catalog_Block_Product_View_Options_Type_Select</product_view_options_type_select>
</rewrite>
</catalog>
</blocks>
app \ code \ local \ Marius \ Test \ Block \ Catalog \ Product \ View \ Options \ Type \ Select.php :
class Marius_Test_Block_Catalog_Product_View_Options_Type_Select extends Mage_Catalog_Block_Product_View_Options_Type_Select
{
//your awesome code here
}
Mage_Catalog_Block_Product_View_Options_Type_Select
di app \ code \ local \ WR \ EPO \ Block \ Catalog \ Block \ Product \ View \ Options \ Type \ Select.php . Saya mencobanya seperti ini: codepen.io/anon/pen/WYOqBr<Mage_Catalog_Block_Product_View_Options_Type_Select> WR_EPO_Block_Catalog_Block_Product_View_Options_Type_Select </Mage_Catalog_Block_Product_View_Options_Type_Select>
dengan<product_view_options_type_select>WR_EPO_Block_Catalog_Block_Product_View_Options_Type_Select</product_view_options_type_select>
dan pastikan tidak ada ruang di dalamnyaproduct_view_options_type_select
product_view_options_type_select
alih-alih nama kelas yang sebenarnyaMage_Catalog_Block_Product_View_Options_Type_Select
. Jika Anda mengubah jawaban Anda maka saya akan menjawab.Untuk My Point of view menimpa dan menulis ulang kedua hal ini berbeda,
Mengesampingkan:
Menulis kembali:
1) Contoh Timpa:
Jika saya perlu mengganti
app/code/core/Mage/Catalog/Block/Product/List.php
file maka saya salin dalam modul lokal saya dengan jalur yang sama seperti yang ditunjukkan di bawah iniapp/code/local/Mage/Catalog/Block/Product/List.php
Ini tidak disarankan oleh Magento. Tapi Anda bisa melakukan itu.
2) Contoh Penulisan Ulang:
Jika saya ingin menulis ulang kelas blok ini
Mage_Adminhtml_Block_Sales_Order_Create
maka saya kode di modul config.xml saya seperti di bawah iniDan di kelas saya
Trimantra_Smallchanges_Block_Adminhtml_Sales_Order_Create
Saya kode Seperti Di Bawah Ini
sumber
Penting untuk ditambahkan di sini adalah bahwa blok penulisan ulang (serta semua penulisan ulang modul Magento lainnya) menyiratkan upaya pemeliharaan yang lebih tinggi dan karenanya harus dianggap sebagai peluang terakhir untuk memperluas fungsionalitas setelah manipulasi konfigurasi, acara, dan penyesuaian tema.
Masalah potensial 1: Template yang ditulis ulang tidak akan diperbarui ketika Anda atau pengelola lain akan memperbarui file sumber Magento. Berarti perbaikan atau peningkatan keamanan tidak akan diterapkan pada kode Anda. Hal yang sama berlaku untuk kelas penulisan ulang lainnya termasuk Blok, tetapi tergantung pada seberapa banyak penulisan ulang dilakukan (lihat di bawah).
Masalah potensial 2: Blok yang Ditulis Ulang (atau kelas lain) mungkin tampaknya ditulis ulang oleh ekstensi lain yang akan Anda coba instal. Maka Anda harus menyelesaikan konflik ini.
Alternatif 1: Gunakan acara, yaitu gali kode yang akan Anda tulis ulang dan periksa apakah ada acara yang dapat digunakan untuk mencapai fungsionalitas yang diinginkan.
Alternatif 2: Menulis ulang pintar, yaitu melihat-lihat: mungkin memeriksa tempat di mana kelas yang akan Anda tulis ulang adalah instantiated dan memeriksa apakah Anda dapat memengaruhi kelas mana yang dipilih melalui konfigurasi atau acara; mungkin ada kelas di sekitar yang memungkinkan Anda untuk mengganti metode 3-baris untuk mengganti nama kelas alih-alih menyalin metode 30 baris dari kelas asli ke yang ditulis ulang.
sumber