Cara menangani kelas "Mysql4" yang sudah tidak digunakan saat menulis ulang model sumber daya

8

Saya harus menulis ulang Mage_Catalog_Model_Resource_Category_Flat.

Kelas sumber daya lama Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Flatmasih ada di Magento 1.7 untuk kompatibilitas ke belakang dan memperluas yang baru.

Pencarian di basis kode untuk model lengkap alias resource_eav_mysql4_category_flattidak membuahkan hasil apa pun. Tetapi config.xmlMage_Catalog berisi baris ini:

<deprecatedNode>catalog_resource_eav_mysql4</deprecatedNode>

Dan saya tidak tahu di mana dan bagaimana deprecatedNodedigunakan.

Kesulitan apa yang muncul saat menulis ulang model sumber daya seperti itu? Haruskah saya menulis ulang kedua kelas? Atau bisakah saya dengan aman mengabaikan kelas mysql4?

Fabian Schmengler
sumber

Jawaban:

5

Jika Anda mengembangkan ekstensi untuk penggunaan pribadi yang seharusnya hanya berfungsi untuk proyek Anda yang dibangun di atas Magento 1.6+ maka tidak ada kekhawatiran. Anda hanya boleh menimpanya Mage_Catalog_Model_Resource_Category_Flatdengan menambahkan ini di config.xmlfile ekstensi Anda:

<models>
    <catalog_resource>
        <rewrite>
            <category_flat>Namespace_Module_Model_Resource_Category_Flat</category_flat>
        </rewrite>
    </catalog_resource>
</models>

Jika Anda sedang membangun ekstensi dan Anda ingin itu berfungsi pada versi sebelum 1.6 Anda perlu menimpa Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Flatkelas juga. Dalam hal ini config.xmlbagian Anda akan terlihat seperti ini:

<models>
    <catalog_resource><!--used for 1.6+ -->
        <rewrite>
            <category_flat>Namespace_Module_Model_Resource_Category_Flat</category_flat>
        </rewrite>
    </catalog_resource>
    <catalog_resource_eav_mysql4><!-- used for versions before 1.6 -->
        <rewrite>
            <category_flat>Namespace_Module_Model_Resource_Eav_Mysql4_Category_Flat</category_flat>
        </rewrite>
    </catalog_resource_eav_mysql4>
</models>

Anda harus meletakkan semua logika Anda Namespace_Module_Model_Resource_Category_Flatdan kelas untuk versi sebelum 1.6 akan terlihat seperti ini:

class Namespace_Module_Model_Resource_Eav_Mysql4_Category_Flat extends Namespace_Module_Model_Resource_Category_Flat
{
}

Dengan cara ini kedua versi menggunakan kode yang sama.

Marius
sumber
7

deprecatedNodedigunakan oleh Magento untuk mencoba dan memuat mysql4*model sumber daya jika resource* tidak ditemukan. Referensi komentar dari Mage_Core_Model_Config::getGroupedClassNamedan Mage_Core_Model_Resource::getEntity:

/**
 * Backwards compatibility for pre-MMDB extensions.
 * In MMDB release resource nodes <..._mysql4> were renamed to <..._resource>. So <deprecatedNode> is left
 * to keep name of previously used nodes, that still may be used by non-updated extensions.
 */

Jika ada resource*model, Anda harus menulis ulang, atau menulis ulang mysql4*. Contoh mysql4*model sumber daya penulisan ulang :

<config>
    <global>
        <models>
            <review_mysql4>
                <rewrite>
                    <review_collection>AW_AdvancedReviews_Model_Mysql4_Review_Collection</review_collection>
                    <review>AW_AdvancedReviews_Model_Mysql4_Review</review>
                </rewrite>
            </review_mysql4>
        </models>
    </global>
</config>

The mysql4*kelas hanya ada untuk kompatibilitas mundur untuk implementasi yang ada yang sudah diperpanjang mereka. Yaitu kelas shell untuk menghindari pemaksaan kode yang ada untuk memperbarui ekstensi pada semuanya untuk terus bekerja.

Dmytro Zavalkin
sumber