Php 将Magento 1.6.1升级到1.7.0保存自定义模块

Php 将Magento 1.6.1升级到1.7.0保存自定义模块,php,magento,module,magento-1.7,Php,Magento,Module,Magento 1.7,当我升级Magento时,AheadWorks模块被禁用 在管理员上保存时,系统->配置->高级->然后单击保存配置 保存此配置时出错:注意:尝试 获取中非对象的属性 MAGENTO_ROOT/app/code/core/Mage/Adminhtml/Model/Config/Data.php 在线135 我已经搜索了很多次,想找到解决办法,但什么也没有得到 如何解决这个问题?在app/code/core/Mage/Adminhtml/Model/Config/Data.php的第135行附近

当我升级Magento时,AheadWorks模块被禁用

在管理员上保存时,系统->配置->高级->然后单击保存配置

保存此配置时出错:注意:尝试 获取中非对象的属性 MAGENTO_ROOT/app/code/core/Mage/Adminhtml/Model/Config/Data.php 在线135

我已经搜索了很多次,想找到解决办法,但什么也没有得到


如何解决这个问题?

在app/code/core/Mage/Adminhtml/Model/Config/Data.php的第135行附近找到以下代码行:

$backendClass = $fieldConfig->backend_model;
if (!$backendClass) {
    $backendClass = 'core/config_data';
}
$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';
}

希望这有帮助。

您也可以关闭Magento的开发人员模式。我不太喜欢修改核心(或者必须扩展它),所以对于懒惰的人来说,根据需要禁用/启用
MAGE\u IS\u DEVELOPER\u模式是最简单的解决方案,直到它被修复。

MagePsyco是正确的,问题在于
app/code/core/MAGE/Adminhtml/Model/Config/Data.php的第135行的代码:

$backendClass = $fieldConfig->backend_model;
if (!$backendClass) {
    $backendClass = 'core/config_data';
}
$backendClass = $fieldConfig->backend_model;
if (!$backendClass) {
    $backendClass = 'core/config_data';
}
Magepyco在回答中提出的修复问题是代码在循环中执行。一旦遇到带有后端模型的属性,$backlendModel变量不会再次重置回
core/config_data
。例如,在系统配置屏幕的系统页面上,“已安装货币”属性定义了后端模型,但后续属性没有定义。这将导致在所有后续属性(将失败)上运行来自
Mage\u Adminhtml\u Model\u System\u Config\u Backend\u Locale
的\u 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发布后不需要修补