1

私が開発している 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 ) で対処され、修正されたと思われます。ただし、これらの他のエラー メッセージの状況は、アイテムをカートに追加しようとした場合でした。アイテムにカスタム オプションがある場合、このエラー メッセージにループします。

私の状況では、バンドルされていない、または構成可能ではない、カスタムオプションのない単純なアイテムがあります。問題なくカートに入れることができます。しかし、注文時にチェックアウト手順全体を実行すると、エラーメッセージが白い画面に表示されます。ブラウザの URL は、チェックアウト成功ページにいることを示しています。

そして、注文は完全に完了したように見え、Magento と Authorize.net の両方に登録されます。

できる限りエラーをデバッグしようとしましたが、これで困惑しました。

参考までに、私は Magento 1.3.2.4 を使用しています。最初にエラーを受け取ったとき、すべてのコア ファイルを再インストールしましたが、それでもエラーを再現できました。

私はテストを続けるつもりですが、なぜこれが起こっているのかについて何か明るいアイデアを持っている人がいたら、あなたの考えを聞きたいです. 私は打ち上げに非常に近づいており、これは全体にキボッシュを置く可能性があります.

4

4 に答える 4

4

以前にこのエラーが発生したことがあり、解決方法についてもヒットしませんでした。そのため、コア ファイルを修正してエラー メッセージを修正する必要がありました。問題は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;

私は常にコア ファイルを変更するのが嫌いですが、バグが発生すると他にできることはあまりありません。

于 2009-11-26T03:16:31.457 に答える
2

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のコードに基づいてこの問題を修正するためにコードを作り直す方法を見つけました。ですので、私の書き方が悪かった可能性が高いです。しかし、それは私にとって問題を解決しました(私はかなり誇りに思っています:)

于 2010-09-10T06:03:49.423 に答える
0

同じ問題が発生しました。バックトレースして、管理者で注文を編集しているときに発生することを特定しました。その注文には、注文後に削除された個別のオプションを持つ製品が少なくとも 1 つ含まれています。

そのような注文を編集するときに製品が単純に削除されるように、3 つのファイルを修正しました。すべての変更は「ローカル」スコープで機能するため、コア ファイルは変更されません。

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;
}
于 2010-02-11T05:26:34.590 に答える
0

クライアントで同じエラーが発生しました.Magentoは1つのサーバーでは正常に動作していましたが、他のサーバーでは動作していなかったので、新しいインストール(移行後)に何か問題があるに違いありません。私はコードをいじらず、DB を修復しただけで正常に動作するようになりました。

于 2012-09-21T21:26:13.833 に答える