Comment éviter les conflits de classes de réécriture de modules dans Magento


9

J'ai un problème de réécriture de classe dans Magento Onepage Checkout car j'ai un module personnalisé dans le pool de codes local et une extension tierce dans le pool de codes de communauté, tous deux étendant la même classe ...

J'ai essayé d'ajouter un nœud dépendant au fichier ModuleA_Name.xml d'un module puis d'étendre la classe de ModuleB dans le fichier Onepage.php mais cela n'a pas fonctionné.

Quelqu'un pourrait-il me donner des informations sur la façon de procéder? Je sais qu'il existe une autre façon de le faire en utilisant un observateur, mais je pourrais vraiment avoir besoin d'une solution pour le moment? En outre, serait-il dangereux pour moi d'utiliser une dépendance puisque ModuleB ne peut être activé que pour différents magasins / vues, cela signifierait-il que le module dépendant ne fonctionnerait plus?

Merci d'avance pour l'aide ...

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
Quelle Onepageclasse en particulier, le bloc ou le modèle?
benmarks

Réponses:


20

Vous avez 3 choix pour résoudre les conflits:

  • Fusionnez le code d'un fichier en conflit dans un autre et désactivez le réécriture config.xml dans un
  • Désactivez la réécriture dans un config.xml, puis faites l'extension du fichier PHP en conflit étendre l'autre extension
  • Utilisez la <depends>capacité de faire dépendre une extension d'une autre. Ils réécriront ensuite dans cet ordre

Exemple (option # 2)

class A_Extension_Model_Type_Onepage extends Mage_Checkout_Model_Type_Onepage

Vous le changeriez en:

class A_Extension_Model_Type_Onepage extends B_Extension_Model_Type_Onepage

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


@benmarks J'ai ajouté du code à partir de chaque fichier config.xml
user1704524

Eh bien, j'ai réussi à résoudre le problème de réécriture de classe en étendant la classe de moduleA avec celle de moduleB
user1704524

Puisque j'utilise OPCheckout et que le module apparaît dans la nouvelle étape, mais il n'est pas appelé par le fichier opcheckout.js pour une raison quelconque, il saute l'étape. J'ai regardé dans la console et je peux voir la classe: section allowmais elle ne devient pas active ...
user1704524
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.