簡體   English   中英

Magento致命錯誤:在非對象上調用成員函數getSku()

[英]Magento Fatal Error: Call to member function getSku() on a non-object

我在開發的Magento商店中遇到一個奇怪的錯誤,盡管我在網上查詢,但似乎沒有其他人在相同的情況下看到過這種確切的錯誤。 Lemme'splain。

錯誤消息的全文是這樣的:

致命錯誤:在第221行上的/path/on/server/app/code/core/Mage/Catalog/Model/Product/Option/Type/Select.php中的非對象上,調用成員函數getSku()。

現在,其他人已經收到了此錯誤消息-該錯誤消息已在1.3.1路線圖( http://www.magentocommerce.com/roadmap/release/1.3.1 )中得到解決。 但是,這些其他錯誤消息的情況是他們試圖將商品添加到購物車中-如果該商品具有自定義選項,它將循環到該錯誤信息。

我的情況是我有一個SIMPLE項-不捆綁或不可配置-沒有任何自定義選項。 我可以輕松地將其添加到購物車中。 但是,如果我執行整個結帳過程,則在下訂單時,錯誤消息會顯示在白色屏幕上。 瀏覽器中的URL顯示我在結帳成功頁面上。

而且,該訂單似乎已通過Magento和Authorize.net進行了完美注冊。

我已經盡力嘗試調試錯誤,但這使我感到困惑。

供參考,我使用的是Magento 1.3.2.4。 當我第一次收到該錯誤時,我重新安裝了所有核心文件,但仍然能夠復制該錯誤。

我將繼續進行測試,但是如果有人對為什么會這樣有任何聰明的主意,我很想聽聽您的想法。 我離發布很近了,這東西可能會使事情變得整整齊齊。

我以前遇到過此錯誤,並且也未獲得如何解決它的任何幫助。 因此,我不得不修改核心文件以修復錯誤消息。 問題是Mage_Catalog_Model_Product_Option::getValueById()可以返回空值,但Catalog/Model/Product/Option/Type/Select.php不檢查這種可能性。

這是對我有用的解決方案:

打開app/code/core/Mage/Catalog/Model/Product/Option/Type/Select.php

將第121行更改為:

$result = $option->getValueById($optionValue)->getSku();

至:

$o= $option->getValueById($optionValue);
$result = is_object($o) ? $o->getSku() : null;

我總是討厭更改核心文件,但是當出現錯誤時,我無能為力了!

我遵循了pygorex1發布的步驟,但是也替換了Select.php文件中的191-195行,因為我仍然遇到另一個與getPrice()類似的錯誤。 我有Magento版本。 1.3.2.4。

第191-195行的原始代碼:

$result = $this->_getChargableOptionPrice(
$option->getValueById($optionValue)->getPrice(),
$option->getValueById($optionValue)->getPriceType() == 'percent',
$basePrice
);

這是我創建的用於替換第191-195行的代碼:

$z= $option->getValueById($optionValue);
$result = is_object($z) ? $z ->getPrice() : null;

$zz = $option->getValueById($optionValue);
$result = is_object($zz) ? $zz ->getPriceType() == 'percent' : $basePrice;

僅供參考-我不是PHP程序員。 我只是偶然發現如何重新處理代碼以基於pygorex1的代碼解決此問題。 因此,很有可能我沒有正確編寫它。 但是,它確實為我解決了這個問題(對此我感到很自豪:)

好吧,我的客戶端也遇到了同樣的錯誤,Magento在一台服務器上工作正常,但在另一台服務器上卻無法正常工作,因此盡管新安裝(遷移后)一定存在問題,但我還是錯了。 我沒有玩代碼,只是修復了數據庫,它開始正常工作。

有同樣的問題。 回溯並確定了在管理員中編輯訂單時發生的情況,並且該訂單包含至少一種產品,該產品具有自下訂單以來已刪除的單個選項。

然后修復了三個文件,以便在編輯此類訂單時只需刪除產品-所有修改都在“本地”范圍內進行,因此核心文件保持不變:

1. app / code / local / Mage / Catalog / Model / Product / Option / Type / Select.php:221

(搜索)

$result = $option->getValueById($optionValue)->getSku();

(前置)

/* hotfix for - PHP Fatal error:  Call to a member function getSku() on a non-object - occurs on admin order edit if a product option has been removed */
if (is_null($option->getValueById($optionValue))) {
    throw new Exception('missing product option');
}

2. app / code / local / Mage / Sales / Model / Quote.php:695

(搜索)

$item = $this->_addCatalogProduct($candidate, $candidate->getCartQty());

(更換)

/* hotfix for - PHP Fatal error:  Call to a member function getSku() on a non-object - occurs on admin order edit if a product option has been removed */
try {
    $item = $this->_addCatalogProduct($candidate, $candidate->getCartQty());
} catch ( Exception $e ) {
    if ($e->getMessage()=='missing product option') { return null; }
        throw new Exception($e->getMessage());
}

3. app / code / local / Mage / Adminhtml / Model / Sales / Order / Create.php:288

(搜索)

if (is_string($item)) {
    return $item;
}

(更換)

if (is_string($item)) {
    return $item;
/* hotfix for - PHP Fatal error:  Call to a member function getSku() on a non-object - occurs on admin order edit if a product option has been removed */
} elseif (is_null($item)) {
    return $this;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM