我刚刚将我们的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
我不太清楚该怎么做。抽象类是被扩展,它只是一个“级别”,比预期的更远。
非常感谢任何意见或建议。
谢谢