Jak zapobiec konfliktowi klas przepisywania modułów w Magento

9

Mam problem z przepisem klasy w Magento Onepage Checkout, ponieważ mam niestandardowy moduł w lokalnej puli kodów i rozszerzenie strony trzeciej w puli kodów społeczności, które rozszerzają tę samą klasę ...

Próbowałem dodać węzeł zależny do pliku ModuleA_Name.xml jednego modułu, a następnie rozszerzyć klasę ModuleB w pliku Onepage.php , ale to nie zadziałało.

Czy ktoś mógłby mi powiedzieć, jak to zrobić? Wiem, że istnieje inny sposób, aby to zrobić za pomocą Obserwatora, ale w tej chwili naprawdę potrzebuję rozwiązania? Ponadto, czy używanie przeze mnie zależności byłoby niebezpieczne, ponieważ moduł B można włączyć tylko dla różnych sklepów / widoków, czy oznaczałoby to, że moduł zależny przestałby działać?

Z góry dziękuję za pomoc ...

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

Moduł 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>
użytkownik1704524
źródło
1
Która Onepageklasa konkretnie, blok czy model?
zyskuje

Odpowiedzi:

20

Masz 3 możliwości rozwiązania konfliktów:

  • Scal kod z jednego pliku powodującego konflikt w drugi i wyłącz przepisywanie pliku config.xml w jednym
  • Wyłącz przepisywanie w jednym pliku config.xml, a następnie spraw, aby plik PHP w konflikcie rozszerzenia rozszerzył drugie rozszerzenie
  • Skorzystaj z <depends>możliwości uzależnienia jednego rozszerzenia od drugiego. Następnie przepiszą w tej kolejności

Przykład (opcja nr 2)

class A_Extension_Model_Type_Onepage extends Mage_Checkout_Model_Type_Onepage

Zmieniłbyś to na:

class A_Extension_Model_Type_Onepage extends B_Extension_Model_Type_Onepage

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

Renon Stewart
źródło
@benmarks Dodałem trochę kodu z każdego pliku config.xml
user1704524
Cóż, udało mi się rozwiązać problem przepisywania klas, rozszerzając klasę modułu A o moduł B
user1704524
Ponieważ używam OPCheckout i moduł pojawia się w nowym kroku, ale nie jest wywoływany przez plik opcheckout.js z jakiegoś powodu pomija ten krok. section allow
Zajrzałem