当我升级Magento时,AheadWorks模块被禁用。
在管理员上保存时,系统 - >配置 - >高级 - >然后单击“保存配置”
保存此配置时发生错误:注意:尝试执行此操作 获取非对象的属性 MAGENTO_ROOT /应用程序/代码/核心/法师/ Adminhtml /型号/配置/ Data.php 在第135行
我一直在寻找解决方案,但我一无所获。
http://www.magentocommerce.com/bug-tracking/issue/?issue=13819
如何解决这个问题?
答案 0 :(得分:13)
在app/code/core/Mage/Adminhtml/Model/Config/Data.php
的第135行找到以下代码行:
$backendClass = $fieldConfig->backend_model;
if (!$backendClass) {
$backendClass = 'core/config_data';
}
并将其替换为:
if (isset($fieldConfig->backend_model)) {
$backendClass = $fieldConfig->backend_model;
}
if (!isset($backendClass)) {
$backendClass = 'core/config_data';
}
希望这有帮助。
答案 1 :(得分:5)
MagePsyco是正确的,问题在于app/code/core/Mage/Adminhtml/Model/Config/Data.php
第135行的代码:
$backendClass = $fieldConfig->backend_model;
if (!$backendClass) {
$backendClass = 'core/config_data';
}
修复MagePsyco的问题在他的回答中表明代码是在循环中执行的。一旦遇到具有后端模型的属性,$ backlendModel变量就不会再次重置回core/config_data
。因此,例如在“系统配置”屏幕的“系统”页面上,“已安装的货币”属性已定义后端模型,但后续属性未定义。这会导致Mage_Adminhtml_Model_System_Config_Backend_Locale
的_afterSave方法在所有后续属性上运行(这将失败)。
更好的解决方案是此代码的版本可以在1.8 alpha版本中找到:
$backendClass = (isset($fieldConfig->backend_model))? $fieldConfig->backend_model : false;
if (!$backendClass) {
$backendClass = 'core/config_data';
}
这会处理所有null / false / empty问题,并确保$ backendModel变量始终包含有效值。这也表明该问题应该得到解决,一旦发布1.8,就不需要修补。
答案 2 :(得分:2)
您也可以关闭Magento的开发者模式。我不是修改核心(或者必须扩展它)的忠实粉丝,所以对于懒惰,根据需要禁用/启用MAGE_IS_DEVELOPER_MODE
是最简单的解决方案,直到它被修复。