So verhindern Sie, dass Module Klassenkonflikte in Magento neu schreiben

9

Ich habe ein Problem beim Umschreiben von Klassen in Magento Onepage Checkout, da ich ein benutzerdefiniertes Modul im lokalen Codepool und eine Drittanbietererweiterung im Community-Codepool habe, die beide dieselbe Klasse erweitern ...

Ich habe versucht, der Datei ModuleA_Name.xml eines Moduls einen abhängigen Knoten hinzuzufügen und dann die Klasse von ModuleB in der Datei Onepage.php zu erweitern , aber dies hat nicht funktioniert.

Könnte mir jemand sagen, wie das geht? Ich weiß, dass es einen anderen Weg gibt, dies mit einem Observer zu tun, aber ich könnte im Moment wirklich nur eine Lösung brauchen. Wäre es für mich auch gefährlich, eine Abhängigkeit zu verwenden, da Modul B möglicherweise nur für verschiedene Speicher / Ansichten aktiviert ist. Würde dies bedeuten, dass das abhängige Modul nicht mehr funktioniert?

Vielen Dank im Voraus für die Hilfe ...

ModulA

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

ModulB

<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
quelle
1
Welche OnepageKlasse speziell, der Block oder das Modell?
Benmarks

Antworten:

20

Sie haben drei Möglichkeiten, um Konflikte zu lösen:

  • Führen Sie den Code aus einer in Konflikt stehenden Datei in eine andere ein und schalten Sie die rewrite config.xml in einer aus
  • Schalten Sie das Umschreiben in einer config.xml aus und lassen Sie die widersprüchliche PHP-Erweiterungsdatei die andere Erweiterung erweitern
  • Verwenden Sie die <depends>Funktion, um eine Erweiterung von einer anderen abhängig zu machen. Sie werden dann in dieser Reihenfolge neu schreiben

Beispiel (Option 2)

class A_Extension_Model_Type_Onepage extends Mage_Checkout_Model_Type_Onepage

Sie würden es ändern in:

class A_Extension_Model_Type_Onepage extends B_Extension_Model_Type_Onepage

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

Renon Stewart
quelle
@benmarks Ich habe Code aus jeder config.xml-Datei hinzugefügt
user1704524
Nun, ich habe es geschafft, das Problem beim Umschreiben von Klassen zu lösen, indem ich die Klasse von Modul A um die von Modul
B
Da ich OPCheckout verwende und das Modul im neuen Schritt angezeigt wird, aber von der Datei opcheckout.js aus irgendeinem Grund nicht aufgerufen wird, wird der Schritt übersprungen. Ich habe in die Konsole geschaut und kann die Klasse sehen: section allowaber sie wird nicht aktiv ...
user1704524