Як запобігти перезаписуванню модулів конфлікту класів у Magento


9

У мене є проблема перезапису класу в Magento Onepage Checkout, оскільки у мене є власний модуль у локальному пулі коду та розширення третьої сторони в пулі кодів спільноти, що розширюють той самий клас ...

Я намагався додати вузол залежності до файлу ModuleA_Name.xml одного модуля, потім розширити клас ModuleB у файлі Onepage.php, але це не спрацювало.

Невже хтось може підняти мені голову щодо того, як це зробити? Я знаю, що є інший спосіб зробити це за допомогою "Спостерігача", але в даний момент я можу просто потребувати рішення? Крім того, було б небезпечно використовувати залежність, оскільки ModuleB може бути ввімкнено лише для різних магазинів / представлень, це означатиме, що залежний модуль більше не працюватиме?

Заздалегідь дякую за допомогу ...

Модуль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>

Модуль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>

1
Який Onepageклас конкретно, блок чи модель?
орієнтири

Відповіді:


20

У вас є 3 варіанти вирішення конфліктів:

  • Об’єднайте код з одного конфліктуючого файлу в інший і вимкніть переписати config.xml в один
  • Вимкніть перезапис в одному config.xml, а потім змусьте конфліктуюче розширення PHP-файла розширити інше розширення
  • Використовуйте <depends>можливість зробити одне розширення залежним від іншого. Потім вони перепишуть у тому порядку

Приклад (варіант №2)

class A_Extension_Model_Type_Onepage extends Mage_Checkout_Model_Type_Onepage

Ви б змінили його на:

class A_Extension_Model_Type_Onepage extends B_Extension_Model_Type_Onepage

Дивіться /programming/14815717/multiple-modules-overriding-same-core-file-in-magento


@benmarks Я додав код з кожного файлу config.xml
user1704524

Ну, мені вдалося вирішити проблему перезапису класів, розширивши клас moduleA на клас модуляB
user1704524

Оскільки я використовую OPCheckout і модуль з'являється на новому кроці, але його не викликає файл opcheckout.js, чомусь він пропускає крок. Я подивився в консоль і бачу клас: section allowале він не стає активним ...
user1704524
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.