Come prevenire il conflitto di classe di riscrittura dei moduli in Magento


9

Ho un problema di riscrittura di classe in Magento Onepage Checkout poiché ho un modulo personalizzato nel pool di codici locale e un'estensione di terze parti nel pool di codici della community che estende entrambi la stessa classe ...

Ho provato ad aggiungere un nodo dipendente al file ModuleA_Name.xml di un modulo, quindi estendo la classe di ModuleB nel file Onepage.php ma questo non ha funzionato.

Qualcuno potrebbe darmi un avvertimento su come farlo So che esiste un altro modo per farlo usando un osservatore, ma al momento potrei davvero aver bisogno di una soluzione? Inoltre, sarebbe pericoloso per me utilizzare una dipendenza poiché ModuleB potrebbe essere abilitato solo per diversi store / view significherebbe che il modulo dipendente non funzionerebbe più?

Grazie in anticipo per l'assistenza...

ModuleA

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

1
Quale Onepageclasse in particolare, il blocco o il modello?
benmarks

Risposte:


20

Hai 3 scelte per risolvere i conflitti:

  • Unire il codice da un file in conflitto in un altro e disattivare la riscrittura config.xml in uno
  • Disattiva la riscrittura in un file config.xml e fai estendere l'altra estensione al file PHP in conflitto
  • Utilizzare la <depends>capacità per fare in modo che un'estensione dipenda da un'altra. Quindi riscriveranno in questo ordine

Esempio (opzione n. 2)

class A_Extension_Model_Type_Onepage extends Mage_Checkout_Model_Type_Onepage

Lo cambieresti in:

class A_Extension_Model_Type_Onepage extends B_Extension_Model_Type_Onepage

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


@benmarks Ho aggiunto del codice da ciascun file config.xml
user1704524

Bene, sono riuscito a risolvere il problema di riscrittura delle classi estendendo la classe del modulo A con quella del modulo B
user1704524,

Dal momento che sto usando OPCheckout e il modulo appare nel nuovo passaggio ma non viene chiamato dal file opcheckout.js per qualche motivo salta il passaggio. Ho guardato nella console e posso vedere la classe: section allowma non diventa attivo ...
user1704524
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.