4

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

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

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

我一直在寻找很多次以找到解决方案,但我一无所获。

http://www.magentocommerce.com/bug-tracking/issue/?issue=13819

如何解决?

4

3 回答 3

13

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

$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';
}

希望这可以帮助。

于 2012-10-10T09:59:09.177 回答
5

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

$backendClass = $fieldConfig->backend_model;
if (!$backendClass) {
    $backendClass = 'core/config_data';
}

MagePsyco 在他的回答中建议的修复问题是代码是在循环中执行的。一旦遇到带有后端模型的属性,$backlendModel 变量就不会core/config_data再次重置。例如,在系统配置屏幕的系统页面上,“已安装货币”属性定义了后端模型,但后续属性没有。这会导致在所有后续属性上运行 _afterSave 方法Mage_Adminhtml_Model_System_Config_Backend_Locale(这将失败)。

更好的解决方案是可以在 1.8 alpha 版本中找到此代码的版本:

$backendClass = (isset($fieldConfig->backend_model))? $fieldConfig->backend_model : false;
if (!$backendClass) {
    $backendClass = 'core/config_data';
}

这会处理所有 null/false/empty 问题,并确保 $backendModel 变量始终包含有效值。这也表明该问题应该得到解决,并且一旦 1.8 发布就不需要修补。

于 2013-05-14T04:25:37.663 回答
2

您还可以关闭 Magento 的开发者模式。我不是修改核心(或必须扩展它)的忠实拥护者,因此对于懒惰的人来说,只需MAGE_IS_DEVELOPER_MODE根据需要禁用/启用是最简单的解决方案,直到它被修复。

于 2012-12-03T17:23:20.307 回答