Cómo manejar las clases obsoletas "Mysql4" al reescribir modelos de recursos

8

Tengo que reescribir Mage_Catalog_Model_Resource_Category_Flat.

La antigua clase de recurso Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Flattodavía está allí en Magento 1.7 para compatibilidad con versiones anteriores y extiende la nueva.

Una búsqueda en la base de código para el alias de modelo completo resource_eav_mysql4_category_flatno arrojó ningún resultado. Pero el config.xmlde Mage_Catalog contiene esta línea:

<deprecatedNode>catalog_resource_eav_mysql4</deprecatedNode>

Y no sé dónde y cómo deprecatedNodese usa.

¿Qué dificultades hay que esperar al reescribir tal modelo de recursos? ¿Debo reescribir ambas clases? ¿O puedo ignorar con seguridad la clase mysql4?

Fabian Schmengler
fuente

Respuestas:

5

Si desarrolla una extensión para uso personal que se supone que funciona solo para su proyecto de compilación en Magento 1.6+, entonces no hay preocupaciones. Solo debe anular Mage_Catalog_Model_Resource_Category_Flatagregando esto en el config.xmlarchivo de su extensión:

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

Si está creando una extensión y desea que funcione en la versión anterior a 1.6, también debe anular la Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Flatclase. En este caso, su config.xmlsección debería verse así:

<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>

Debería poner toda su lógica Namespace_Module_Model_Resource_Category_Flaty la clase para versiones anteriores a 1.6 debería tener este aspecto:

class Namespace_Module_Model_Resource_Eav_Mysql4_Category_Flat extends Namespace_Module_Model_Resource_Category_Flat
{
}

De esta manera, ambas versiones usan el mismo código.

Marius
fuente
7

deprecatedNodeMagento lo utiliza para intentar cargar el mysql4*modelo de recursos si resource* no se encuentra. Consulte los comentarios de Mage_Core_Model_Config::getGroupedClassNamey 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.
 */

Si hay un resource*modelo, debe volver a escribirlo; de lo contrario, vuelva a escribir mysql4*uno. Ejemplo de reescritura del mysql4*modelo de recurso:

<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>

Las mysql4*clases solo están ahí para la compatibilidad con versiones anteriores de implementaciones existentes que ya las extendieron. Es decir, clases de shell para evitar forzar el código existente para actualizar las extensiones en todo para seguir trabajando.

Dmytro Zavalkin
fuente