Magentoでモジュール書き換えクラスの競合を防ぐ方法


9

ローカルコードプールにカスタムモジュールがあり、コミュニティコードプールにサードパーティの拡張機能があり、どちらも同じクラスを拡張しているため、Magento Onepage Checkoutでクラス書き換えの問題があります...

私は、ノードを依存して追加しようとしましたModuleA_Name.xmlのその後のクラスに延びる1つのモジュールのファイルModuleBをしてOnepage.phpファイルが、これは働いていません。

誰かが私にこれを行う方法を教えてもらえますか?オブザーバーを使用してそれを行う別の方法があることを知っていますが、現時点で本当に解決策が必要なだけかもしれませんか?また、ModuleBは異なるストア/ビューに対してのみ有効になっている可能性があるため、依存関係を使用するのは危険ですか?依存するモジュールが機能しなくなるということですか?

援助を事前にありがとう...

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
Onepage具体的には、ブロックとモデルのどちらのクラスですか?
ベンマークス2013年

回答:


20

競合を解決するには、3つの選択肢があります。

  • 1つの競合するファイルから別のファイルにコードをマージし、1つで書き換えconfig.xmlをオフにします
  • 1つのconfig.xmlで書き換えをオフにしてから、競合する拡張PHPファイルに他の拡張を拡張させます。
  • この<depends>機能を使用して、1つの拡張機能を別の拡張機能に依存させます。次に、その順序で書き換えます

例(オプション#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のクラスをmoduleBのクラスで拡張することでクラス書き換えの問題を解決できました
user1704524

OPCheckoutを使用しており、モジュールは新しいステップに表示されますが、何らかの理由でopcheckout.jsファイルから呼び出されないため、ステップがスキップされます。コンソールを確認したところ、クラスは表示されていますsection allowが、アクティブにはなりません...
user1704524
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.