Cara Benar Nonaktifkan (Model) Menulis Ulang

10

Ada ekstensi pihak ketiga yang menulis ulang kelas inti Magento tertentu. Seharusnya tidak masalah apakah itu blok, helper atau model, tetapi dalam hal ini adalah model. Sekarang saya menemukan bahwa penulisan ulang ini buruk dan saya ingin menonaktifkannya tanpa mengubah ekstensi pihak ketiga. Karenanya, saya menulis ekstensi khusus yang tergantung pada ekstensi pihak ketiga. Apa cara terbaik untuk menonaktifkan penulisan ulang pihak ketiga? Yang aman yang bisa saya pikirkan adalah mendefinisikan penulisan ulang kustom, yang digunakan sebagai ganti penulisan ulang pihak ketiga:

<global>
    <models>
        <custom_extension>
            <class>Custom_Extension_Model</class>
        </custom_extension>
        <mage_core>
            <rewrite>
                <sth>Custom_Extension_Model_Sth</sth>
            </rewrite>
        </mage_core>
    </models>
</global>

Sth.php, kelas langsung meluas dari kelas Mage dan karenanya menonaktifkan penulisan ulang pihak ketiga:

class Custom_Extension_Model_Sth extends Mage_Core_Model_Sth
{

}

Ini bekerja, tetapi tidak terasa terlalu enak. Berpikir tentang pengamat, dimungkinkan untuk menonaktifkannya hanya melalui config.xml dengan mengaturnya disabled. Apakah hal seperti ini dimungkinkan dengan penulisan ulang? Saya mencoba menggunakan yang berikut ini dan berhasil:

<global>
    <models>
        <mage_core>
            <rewrite>
                <sth></sth>
            </rewrite>
        </mage_core>
    </models>
</global>

Tetapi apakah aman untuk melakukan itu? Apakah ini berfungsi di semua versi? Saya tidak pernah melihat itu di alam liar, itulah sebabnya saya bertanya.

Simon
sumber

Jawaban:

1

Selama simpul benar-benar kosong, Magento akan berpikir tidak ada penulisan ulang dan 'menggunakan awalan kelas untuk membentuk nama kelas' jika simpul tidak pernah menjadi milik mereka. Dalam Mage_Core_Model_Config::getGroupedClassName.

Namun saya berpikir bahwa Anda harus menggunakan <sth/>daripada <sth></sth>berhenti memformat mengubah tag menjadi tidak kosong ('\ n' di mata magento) yang akan berakhir dengan kesalahan kelas yang tidak ditemukan.

Saya tidak percaya ada opsi 'disable' untuk helper, blok atau model. Anda juga bisa menggunakan Pengamat (yang akan mengembalikan konfigurasi seperti seharusnya) tetapi masalah yang saya lihat adalah Anda memaksakan modul apa pun yang ingin menambahkan penulisan kembali setelah modul Anda untuk menggunakan pengamat sama sekali atau untuk mengetahui untuk menonaktifkan pengamat Anda melalui XML.

Sesuatu seperti:

    public function controllerActionPredispatch(Varien_Event_Observer $event)
    {
        $helper = Mage::helper('webtise_foundationalerts');
        if (! $helper->isAdmin()) {
            $node = Mage::getConfig()->getNode('global/models/core/rewrite');
unset($node->sth);
        }
    }

Jadi bagi saya cara XML menang.

James Anelay - TheExtensionLab
sumber
3

Saya akan mengatakan jika Anda membuat modul khusus untuk menangkal ini pastikan ia memiliki ketergantungan pada modul itu menimpa.

Untuk mencegah perilaku yang tidak terduga, saya mungkin akan mendefinisikan ulang penulisan dengan cara yang 'tepat'

<global>
    <models>
        <mage_core>
            <rewrite>
                <sth>Mage_Core_Model_Sth</sth>
            </rewrite>
        </mage_core>
    </models>
</global>

Baru-baru ini menemukan masalah di mana 1 tag kosong di dalam tag lain tidak terdeteksi oleh Magento, dikembalikan nullsebagai ganti objek yang melemparkan peringatan. Tidak fatal tetapi dalam mode pengembang dan untuk logging cukup mengganggu.

Tapi tidak ada bukti kuat di sini untuk membuktikan jalan Anda akan menyebabkan kesalahan :)

Sander Mangel
sumber