将Magento从1.7升级到1.9会导致错误:地址总模型应该从Mage_Sales_Model_Quote_Address_Total_Abstract

时间:2017-05-24 17:58:15

标签: magento magento-1.7 magento-1.9

我刚刚将我们的Magento实例从v1.7升级到v1.9。当购物车更新时,其中一个商店网站现在收到错误:

  

地址总模型应该从 Mage_Sales_Model_Quote_Address_Total_Abstract 扩展。

我遇到了this similar post,OP遇到了同样的错误,但看起来它是由不同的问题造成的。

我抓了字符串The address total model should be extended from Mage_Sales_Model_Quote_Address_Total_Abstract.,可以看到它来自文件 base / app / code / core / Mage / Sales / Model / Quote / Address / Total / Collector.php 。这是包含抛出错误的逻辑的方法:

 
    /**
     * Init model class by configuration
     *
     * @param string $class
     * @param string $totalCode
     * @param array $totalConfig
     * @return Mage_Sales_Model_Quote_Address_Total_Abstract
     */
    protected function _initModelInstance($class, $totalCode, $totalConfig)
    {
        $model = Mage::getModel($class);
        if (!$model instanceof Mage_Sales_Model_Quote_Address_Total_Abstract) {
            Mage::throwException(
                Mage::helper('sales')->__('The address total model should be extended from Mage_Sales_Model_Quote_Address_Total_Abstract.')
            );
        }

        $model->setCode($totalCode);
        $this->_modelsConfig[$totalCode]= $this->_prepareConfigArray($totalCode, $totalConfig);
        $this->_modelsConfig[$totalCode]= $model->processConfigArray(
            $this->_modelsConfig[$totalCode],
            $this->_store
        );

        return $model;
    }

我接受了另一个帖子中发布的建议并转储了$model的内容,以查看实际一个实例的类,结果:

object(Mage_Sales_Model_Quote_Address_Total_Nominal)#358 (5) {
  ["_code":protected]=>
  NULL
  ["_address":protected]=>
  NULL
  ["_canAddAmountToAddress":protected]=>
  bool(true)
  ["_canSetAddressAmount":protected]=>
  bool(true)
  ["_itemRowTotalKey":protected]=>
  NULL
}

所以Mage_Sales_Model_Quote_Address_Total_Collector::_initModelInstance() base / app / code / core / Mage / Sales / Model / Quote / Address / Total / Collector.php 中的方法要求$method成为Mage_Sales_Model_Quote_Address_Total_Abstract的实例,但它实际上是Mage_Sales_Model_Quote_Address_Total_Nominal的实例。

稍微讨论一下后,我可以看到Mage_Sales_Model_Quote_Address_Total_Nominal类是在 base / app / code / core / Mage / Sales / Model / Quote / Address / Total / Nominal中声明的。 php 文件,当我打开它时,我看到:

class Mage_Sales_Model_Quote_Address_Total_Nominal extends Mage_Sales_Model_Quote_Address_Total_Abstract
{

Mage_Sales_Model_Quote_Address_Total_Collector::_initModelInstance()要求$method成为 Mage_Sales_Model_Quote_Address_Total_ 抽象 的实例,但它的实际 Mage_Sales_Model_Quote_Address_Total_ Nominal Mage_Sales_Model_Quote_Address_Total_ 抽象 的实例。

所以而不是:

  

Mage_Sales_Model_Quote_Address_Total_Abstract => $method

这是:

  

Mage_Sales_Model_Quote_Address_Total_Abstract => Mage_Sales_Model_Quote_Address_Total_Nominal => $method

我不太清楚该怎么做。抽象类被扩展,它只是一个“级别”,比预期的更远。

非常感谢任何意见或建议。

谢谢

0 个答案:

没有答案