2012-10-01 56 views
4

當我升級Magento時,AheadWorks模塊被禁用。升級Magento 1.6.1到1.7.0保存自定義模塊

當管理員,系統節能 - >配置 - >高級 - >然後點擊保存配置

時發生錯誤,保存此配置:提示:嘗試 獲得非對象的財產 MAGENTO_ROOT /app/code/core/Mage/Adminhtml/Model/Config/Data.php 上線135

我一直在尋找在多次找到解決辦法,但我什麼也沒得到。

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

如何解決呢?

回答

12

找到下面的代碼行圍繞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'; 
} 

希望這有助於。

+0

謝謝MagePsycho。有用! –

+0

謝謝,它工作完美.. –

2

您也可以關閉Magento的開發者模式。我不是修改內核(或者不必擴展它)的忠實粉絲,所以對於懶惰,只需要根據需要禁用/啓用MAGE_IS_DEVELOPER_MODE是最簡單的解決方案,直到它被修復。

5

MagePsyco是正確的,問題是用代碼在行app/code/core/Mage/Adminhtml/Model/Config/Data.php 135:

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

與修復MagePsyco建議在他的回答的問題是,該代碼是在一個循環中執行。一旦遇到具有後端模型的屬性,$ backlendModel變量不會再次重置爲core/config_data。因此,例如在「系統配置」屏幕的「系統」頁面上,「已安裝的貨幣」屬性具有已定義的後端模型,但後續屬性不會。這會導致從Mage_Adminhtml_Model_System_Config_Backend_Locale的_afterSave方法在所有後續屬性上運行(這將失敗)。

更好的解決方案是該代碼的版本,可以在1.8 alpha版本中找到:

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

這需要所有的空/假/空問題的關心和確保$ backendModel變量總是包含一個有效的值。這也表明該問題應該得到解決,1.8版發佈後不需要修補。