[英]Magento : Fatal error: Call to a member function getMethodInstance() on a non-object
[英]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.