Cómo evitar conflictos de clase de reescritura de módulos en Magento

9

Tengo un problema de reescritura de clase en Magento Onepage Checkout, ya que tengo un módulo personalizado en el grupo de códigos local y una extensión de terceros en el grupo de códigos de la comunidad, ambos extendiendo la misma clase ...

Intenté agregar un nodo dependiente al archivo ModuleA_Name.xml de un módulo y luego extendí la clase de ModuleB en el archivo Onepage.php , pero esto no funcionó.

¿Podría alguien darme una idea de cómo hacerlo? Sé que hay otra forma de hacerlo usando un Observador, pero ¿podría realmente necesitar una solución en este momento? Además, ¿sería peligroso para mí usar una dependencia ya que el Módulo B solo se puede habilitar para diferentes tiendas / vistas, eso significaría que el módulo dependiente ya no funcionaría?

Gracias de antemano por la ayuda...

Módulo A

<global>
  <rewrite>
      <moduleA>
          <from><![CDATA[#^/checkout/onepage/#]]></from>
          <to>/moduleA/onepage/</to>
      </moduleA>
      <moduleA>
          <from><![CDATA[#^/checkout/cart/add/#]]></from>
          <to>/moduleA/cart/add/</to>
      </moduleA>
  </rewrite>

Módulo B

<global>
    <models>
      <salesrep>
        <class>ModuleB_SalesRep_Model</class>
        <resourceModel>salesrep_mysql4</resourceModel>
      </salesrep>

      <salesrep_mysql4>
        <class>ModuleB_SalesRep_Model_Mysql4</class>
        <entities>
          <salesrep>
            <table>salesrep</table>
          </salesrep>
        </entities>
      </salesrep_mysql4>

      <checkout>
        <rewrite>
          <type_onepage>ModuleB_SalesRep_Model_Type_Onepage</type_onepage>
        </rewrite>
      </checkout>

      <modulebadminthemecontroller>
        <class>LucidPath_SalesRep_Controller</class>
      </modulebadminthemecontroller>
    </models>
</global>
usuario1704524
fuente
1
¿Qué Onepageclase específicamente, el bloque o el modelo?
Benmarks

Respuestas:

20

Tienes 3 opciones para resolver conflictos:

  • Combine el código de un archivo en conflicto en otro y apague rewrite config.xml en uno
  • Apague la reescritura en un config.xml y luego haga que la extensión conflictiva del archivo PHP extienda la otra extensión
  • Use la <depends>capacidad de hacer que una extensión dependa de otra. Luego reescribirán en ese orden

Ejemplo (opción # 2)

class A_Extension_Model_Type_Onepage extends Mage_Checkout_Model_Type_Onepage

Lo cambiarías a:

class A_Extension_Model_Type_Onepage extends B_Extension_Model_Type_Onepage

Ver /programming/14815717/multiple-modules-overriding-same-core-file-in-magento

Renon Stewart
fuente
@benmarks He agregado un código de cada archivo config.xml
user1704524
Bueno, he logrado resolver el problema de reescritura de la clase extendiendo la clase del módulo A con la del módulo B
user1704524
Como estoy usando OPCheckout y el módulo aparece en el nuevo paso, pero el archivo opcheckout.js no lo llama por alguna razón, omite el paso. He buscado en la consola y puedo ver la clase: section allowpero no se activa ...
user1704524