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

Jos*_*ano 5 php module magento magento-1.7

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

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

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

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

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

如何解决?

Mag*_*cho 13

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

$backendClass = $fieldConfig->backend_model;
if (!$backendClass) {
    $backendClass = 'core/config_data';
}
Run Code Online (Sandbox Code Playgroud)

并将其替换为:

if (isset($fieldConfig->backend_model)) {
    $backendClass = $fieldConfig->backend_model;
}
if (!isset($backendClass)) {
    $backendClass = 'core/config_data';
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.


Jim*_*ran 5

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

$backendClass = $fieldConfig->backend_model;
if (!$backendClass) {
    $backendClass = 'core/config_data';
}
Run Code Online (Sandbox Code Playgroud)

修复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';
}
Run Code Online (Sandbox Code Playgroud)

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