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 发布就不需要修补。