Magentoの致命的なエラー:非オブジェクトのメンバー関数getSku()の呼び出し
-
05-07-2019 - |
質問
私が開発しているMagentoショップで奇妙なエラーに遭遇しました。オンラインでの問い合わせにもかかわらず、同じ状況でこのエラーを誰も見たことがありません。レムの平野。
エラーメッセージの全文は次のとおりです。
致命的なエラー: / path / on / server / app / code / core / Mage / Catalog / Model / Product / Option /にある非オブジェクトのメンバー関数getSku()を呼び出す221行目に「Type / Select.php」と入力します。
現在、他の人がこのエラーメッセージを受け取っています。1.3.1ロードマップ( http://www.magentocommerce.com/roadmap/release/1.3.1 )。ただし、これらの他のエラーメッセージの状況は、カートにアイテムを追加しようとした場合です。アイテムにカスタムオプションがある場合、このエラーメッセージにループします。
私の状況では、カスタムオプションなしで、シンプルなアイテム(バンドルまたは構成不可)があります。問題なくカートに追加できます。しかし、チェックアウト手順全体を実行すると、注文時にエラーメッセージが白い画面に表示されます。ブラウザーのURLには、チェックアウト成功ページに「I’ m」と表示されます。
そして、注文は完全に行われているようで、MagentoとAuthorize.netの両方で登録されています。
私はできる限りエラーのデバッグを試みましたが、これは困惑しました。
参考のために、Magento 1.3.2.4。のI’ m最初にエラーを受け取ったとき、すべてのコアファイルを再インストールしましたが、それでもエラーを再現できました。
私はテストを続けますが、なぜこれが起こっているのかについて明るいアイディアがあれば、あなたの考えを聞くのが大好きです。私は立ち上げに非常に近いので、このことは全体にキボッシュを置く可能性があります。
解決
私は以前にこのエラーを経験しましたが、その解決方法についてもヒットしていませんでした。そのため、コアファイルを変更してエラーメッセージを修正する必要がありました。問題は Mage_Catalog_Model_Product_Option :: getValueById()
がnull値を返す可能性があることですが、 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;
FYI-私はPHPプログラマーではありません。私はたまたま、pygorex1のコードに基づいてこの問題を修正するためにコードを修正する方法を見つけました。だから、私がそれを正しく書かなかった可能性は十分にあります。しかし、それは私にとって問題を解決しました(私はかなり誇りに思っています:)
同じ問題があります。バックトレースし、adminで注文を編集しているときに発生することを確認し、その注文には少なくとも1つの製品が含まれており、注文後に個々のオプションが削除された。
3つのファイルを修正し、そのような注文を編集するときに製品が単に削除されるようにしました。コアファイルがそのまま残るようにスコープ:
1。 app / code / local / Mage / Catalog / Model / Product / Option / Type / Select.php:221
(検索)
$result = $option->getValueById($optionValue)->getSku();
(prepend)
/* 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;
}
まあ、クライアントにも同じエラーがありました。Magentoは一方のサーバーでは正常に機能していましたが、もう一方のサーバーでは正常に機能していませんでした。私はコードをいじらず、DBを修復しただけで、適切に動作し始めました。