Pregunta

Tengo que volver a escribir Mage_Catalog_Model_Resource_Category_Flat.

El viejo Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Flat clase de recurso aún está allí en Magento 1.7 para la compatibilidad hacia atrás y se extiende por el nuevo.

Una búsqueda en el código base para el modelo de resource_eav_mysql4_category_flat alias completa no dió ningún resultado. Pero el config.xml de Mage_Catalog contiene esta línea:

<deprecatedNode>catalog_resource_eav_mysql4</deprecatedNode>

Y no sé dónde y cómo se utiliza deprecatedNode.

¿Qué dificultades hay para esperar al reescribir un modelo de este tipo de recursos? Debería reescribir ambas clases? O puedo ignorar la clase MySQL4?

¿Fue útil?

Solución

Si usted desarrolla una extensión para uso personal que se supone que funciona solamente para su proyecto de construcción de Magento 1.6+ entonces no hay preocupaciones. Sólo se debe anular Mage_Catalog_Model_Resource_Category_Flat añadiendo esta en el archivo config.xml de su extensión:

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

Si usted está construyendo una extensión y que desea que el trabajo en la versión 1.6 antes de que necesita para sustituir la clase de Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Flat también. En este caso, su sección config.xml debería tener este aspecto:

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

Se debe poner toda su lógica en Namespace_Module_Model_Resource_Category_Flat y la clase de 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 utilizan el mismo código.

Otros consejos

deprecatedNode es utilizado por Magento para tratar de modelo de recurso mysql4* carga si resource* no se ha encontrado. Hacer referencia a los comentarios de Mage_Core_Model_Config::getGroupedClassName y 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 modelo resource* debe volver a escribir, de lo contrario reescribir uno mysql4*. Ejemplo de reescribir modelo de recursos mysql4*:

<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 clases mysql4* están allí sólo por compatibilidad con versiones anteriores para las implementaciones existentes que ya ellos se extendían. Es decir. clases de shell para evitar forzar el código existente para actualizar la extiende sobre todo para seguir trabajando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top