Como impedir que o módulo reescreva conflitos de classe no Magento

9

Eu tenho um problema de reescrita de classe no Magento Onepage Checkout, pois tenho um módulo personalizado no pool de códigos local e uma extensão de terceiros no pool de códigos da comunidade, estendendo a mesma classe ...

Tentei adicionar um nó dependente ao arquivo ModuleA_Name.xml de um módulo e estender a classe ModuleB no arquivo Onepage.php, mas isso não funcionou.

Alguém poderia me dar uma dica de como fazer isso? Sei que existe outra maneira de fazer isso usando um Observer, mas realmente preciso de uma solução no momento? Além disso, seria perigoso para mim usar uma dependência, já que o Módulo B pode ser ativado apenas para diferentes armazenamentos / visualizações, o que significa que o módulo dependente não funcionaria mais?

Agradecemos antecipadamente a assistência ...

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>

ModuleB

<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>
user1704524
fonte
11
Qual Onepageclasse especificamente, o bloco ou o modelo?
benmarks

Respostas:

20

Você tem três opções para resolver conflitos:

  • Mesclar o código de um arquivo em conflito para outro e desativar a reescrita config.xml em um
  • Desative a reescrita em um config.xml e faça com que o arquivo PHP da extensão conflitante estenda a outra extensão
  • Use o <depends>recurso para fazer uma extensão depender de outra. Eles reescreverão nessa ordem

Exemplo (opção 2)

class A_Extension_Model_Type_Onepage extends Mage_Checkout_Model_Type_Onepage

Você o alteraria para:

class A_Extension_Model_Type_Onepage extends B_Extension_Model_Type_Onepage

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

Renon Stewart
fonte
@benmarks Adicionei algum código de cada arquivo config.xml
user1704524
Bem eu consegui resolver o problema classe reescrita estendendo a classe de moduleA com a de moduleB
user1704524
Como estou usando o OPCheckout e o módulo aparece na nova etapa, mas ele não é chamado pelo arquivo opcheckout.js por algum motivo, ignora a etapa. Eu olhei no console e pode ver a classe: section allowmas não se torna ativa ...
user1704524