【问题标题】:Extending Magento Model Not Working扩展 Magento 模型不起作用
【发布时间】:2015-01-19 01:19:18
【问题描述】:

我正在尝试扩展一个社区插件,并且对我来说一切看起来都是正确的,但我一定遗漏了一些东西,因为我的方法没有覆盖社区插件方法。

奇怪的是我下载了Modules Conflict Detector,它说我的插件很好地扩展了社区插件。

app/etc/modules/KNG_M2eProMods.xml

<?xml version="1.0"?>
<config>
    <modules>
        <KNG_M2eProMods>
            <active>true</active>
            <codePool>local</codePool>
            <depends>
                <Ess_M2ePro/>
            </depends>
        </KNG_M2eProMods>
    </modules>
</config>

app/code/local/KNG/M2eProMods/etc/config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <KNG_M2eProMods>
            <version>0.1.0</version>
        </KNG_M2eProMods>
    </modules>
    <global>
        <models>
            <M2ePro>
                <rewrite>
                    <magento_payment>KNG_M2eProMods_Model_Magento_Payment</magento_payment>
                    <magento_quote>KNG_M2eProMods_Model_Magento_Quote</magento_quote>
                    <magento_order>KNG_M2eProMods_Model_Magento_Order</magento_order>
                </rewrite>
            </M2ePro>
        </models>
    </global>
</config>

app/code/local/KNG/M2eProMods/Model/Magento/Order.php

class KNG_M2eProMods_Model_Magento_Order extends Ess_M2ePro_Model_Magento_Order
{
    private function placeOrder()
    {
     ......
    }
}

app/code/local/KNG/M2eProMods/Model/Magento/Payment.php

class KNG_M2eProMods_Model_Magento_Payment extends Ess_M2ePro_Model_Magento_Payment
{
    protected $_code = 'payment_profile';
}

app/code/local/KNG/M2eProMods/Model/Magento/Quote.php

class KNG_M2eProMods_Model_Magento_Quote extends Ess_M2ePro_Model_Magento_Quote
{
    private function initializeQuoteItems()
    {
     ......
    }
}

这是我要扩展的插件的 config.xml 中的一个 sn-p。 app/code/community/Ess/M2ePro/etc/config.xml

......
<models>
        <M2ePro>
            <class>Ess_M2ePro_Model</class>
            ......
        </M2ePro>
        ......
</models>
......

这是我正在扩展的文件路径。

app/code/community/Ess/M2ePro/Model/Magento/Order.php
app/code/community/Ess/M2ePro/Model/Magento/Payment.php
app/code/community/Ess/M2ePro/Model/Magento/Quote.php

感谢您的帮助

【问题讨论】:

  • 如果你想要这样做,私有函数是不可继承的
  • @subroutines 我实际上是在尝试覆盖私有函数。我以为你仍然可以覆盖它们。我错了吗?
  • 不,你不能那样做。这就是为什么它们被指定为私有的。您需要在父类中将其范围更改为受保护。
  • @subroutines 我想这可以解释它。我们不会改变父类的范围,而是只修改父类。感谢您的帮助。

标签: php xml magento


【解决方案1】:

您的 config.xml 没有设置正确。 Magento 在读取 xml 文件时区分大小写。所以你的config.xml文件应该是这样的,

<?xml version="1.0"?>
<config>
  <modules>
    <KNG_M2eProMods>
      <version>0.1.0</version>
    </KNG_M2eProMods>
  </modules>
  <global>

    <models>
      <m2epromods>
        <class>KNG_M2eProMods_Model</class>
        <resourceModel>m2epromods_mysql4</resourceModel>
      </m2epromods>
            <m2epro>
                <rewrite>
                    <magento_order>KNG_M2eProMods_Model_M2ePro_Magento_Order</magento_order>
                </rewrite>
            </m2epro>
            <m2epro>
                <rewrite>
                    <magento_payment>KNG_M2eProMods_Model_M2ePro_Magento_Payment</magento_payment>
                </rewrite>
            </m2epro>
            <m2epro>
                <rewrite>
                    <magento_quote>KNG_M2eProMods_Model_M2ePro_Magento_Quote</magento_quote>
                </rewrite>
            </m2epro>
    </models>
  </global>
</config> 

如果您有任何疑问,请在此处发表评论。

【讨论】:

  • 你是在说 m2epro 是大写 bs 是小写。我的版本是混合大小写,如“M2ePro”,因为我覆盖的插件使用的是相同的混合大小写。如app/code/community/Ess/M2ePro/etc/config.xml文件的代码sn-p所示。
  • 我也想知道为什么你有一个助手。我根本没有使用助手。这些不是必需的吗?
  • 对不起,我没注意到。在您的情况下,不需要助手。我现在已经删除了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-27
  • 2012-01-31
  • 2011-06-26
  • 2011-10-18
相关资源
最近更新 更多