如何防止Magento中的模块重写类冲突


9

我在Magento Onepage Checkout中存在类重写问题,因为我在本地代码池中有一个自定义模块,而在社区代码池中有一个第三方扩展,都扩展了同一类。

我试图添加取决于节点到ModuleA_Name.xml一个模块的文件,然后扩展类的ModuleBOnepage.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具体是哪个类,是块还是模型?
13年

Answers:


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的类扩展为moduleB的类来解决类重写问题
user1704524

由于我正在使用OPCheckout,并且该模块出现在新步骤中,但是由于某种原因它没有被opcheckout.js文件调用,因此它跳过了这一步。我已经在控制台中查看了,可以看到该类:section allow但它并未处于活动状态
user1704524 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.