Magento'da modül yeniden yazma sınıfı çakışması nasıl önlenir


9

Yerel kod havuzunda özel bir modül ve aynı kodu genişleten topluluk kodu havuzunda bir üçüncü taraf uzantısı var gibi Magento Onepage Checkout sınıf yeniden yazma sorunu var ...

Ben hiç düğüm bağlıdır eklemek için denedim ModuleA_Name.xml sonra sınıfını genişletmek biri modülün dosyada ModuleB içinde Onepage.php dosyası ancak bu işe yaramadı.

Birisi bana bunu nasıl yapabileceğimi söyleyebilir mi? Bir Gözlemci kullanarak bunu yapmanın başka bir yolu olduğunu biliyorum ama şu anda gerçekten bir çözüme ihtiyacım olabilir mi? Ayrıca, ModülB yalnızca farklı mağaza / görünümler için etkinleştirilebileceğinden bağımlılık kullanmam tehlikeli olabilir mi? Bu, bağımlı modülün artık çalışmadığı anlamına mı gelir?

Yardımınız için şimdiden teşekkür ederiz ...

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
Özellikle hangi Onepagesınıf, blok veya model?
benmarks

Yanıtlar:


20

Çatışmaları çözmek için 3 seçeneğiniz var:

  • Başka dosyayı çakışan birinden kodu Birleştirme ve yeniden yazma kapatmak config.xml birinde
  • Bir config.xml dosyasında yeniden yazmayı kapatın ve çakışan uzantı PHP dosyasının diğer uzantıyı uzatmasını sağlayın
  • <depends>Bir uzantıyı diğerine bağımlı hale getirmek için bu özelliği kullanın . Daha sonra bu sırayla yeniden yazacaklar

Örnek (seçenek # 2)

class A_Extension_Model_Type_Onepage extends Mage_Checkout_Model_Type_Onepage

Bunu şu şekilde değiştirirsiniz:

class A_Extension_Model_Type_Onepage extends B_Extension_Model_Type_Onepage

Bkz. Https://stackoverflow.com/questions/14815717/multiple-modules-overriding-same-core-file-in-magento


@benmarks Her config.xml dosyasından bir kod ekledim
user1704524

Ben de modül yeniden sınıfını moduleB ile genişleterek sınıf yeniden yazma sorunu çözmek başardı
user1704524

OPCheckout'u kullandığımdan ve modül yeni adımda göründüğünden, ancak adımı atlaması nedeniyle opcheckout.js dosyası tarafından çağrılmadığından. Konsola baktım ve sınıfı görebiliyorum: section allowama aktif hale gelmiyor ...
user1704524
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.