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 アルファ リリースにあるこのコードのバージョンです。
$backendClass = (isset($fieldConfig->backend_model))? $fieldConfig->backend_model : false;
if (!$backendClass) {
$backendClass = 'core/config_data';
}
これにより、すべての null/false/empty 問題が処理され、$backendModel 変数に常に有効な値が含まれるようになります。これは、1.8 がリリースされたら、問題を解決する必要があり、パッチを適用する必要がないことも示唆しています。