繁体   English   中英

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

[英]Upgrading Magento 1.6.1 to 1.7.0 save custom module

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

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

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

我一直在寻找解决方案,但我一无所获。

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

如何解决?

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

希望这可以帮助。

MagePsyco是正确的,问题在于app/code/core/Mage/Adminhtml/Model/Config/Data.php第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 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就不需要修补。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM