1

ユーザーが検索するたびに、次のエラーが表示されます。

2012-06-26 11:05:21.671 [NOTICE] [208.69.120.120:48175-0#hostname] [STDERR] PHP Fatal error: Call to undefined method Mage_Catalog_Model_Resource_Product_Flat::getEntityTablePrefix() in /chroot/home/SITENAME/DOMAIN.COM/html/app/code/core/Mage/Eav/Model/Entity/Attribute/Abstract.php on line 505

そして、ユーザーの結果が表示される代わりに、空白の白いページが表示されます。ユーザー側にはエラーはなく、UI も表示されず、ただ白いだけです。これは私が気付いた最初の問題でしたが、同じ日に次の問題が発生し始めました。

  1. ホワイトの検索結果
  2. 階層化されたナビゲーションのすべてのサブカテゴリのサブカテゴリ製品数が 0 を示しています。
  3. 一部のお客様は、ログイン時にフロントエンド UI から注文を表示できません。
  4. 注文エクスポート スクリプトが空のフィールドを返します (4.3 ではなく 1.7mb)。
  5. 「Made-in-the-USA」および「ベストセラー」のページで、必要以上に多くの製品が返されています。

サイト全体のインデックスを再作成すると、インデックスの処理中に一定期間、上記のすべてが機能するため、これらはすべて正しくないことがわかりました。ただし、インデックスが完了すると、すべてが再び壊れます。これが発生した同じ日に、テーブルの 1 つが壊れており、修復する必要があることを示すエラー ページが表示されました。PHPMyAdmin の修復機能と最適化機能をすべてのテーブルで実行し、そのエラーを修正しましたが、これらはすべてまだ壊れています。

アイデアはありますか?これを修正するために何ができるかについてのアイデアはありますか? 私はどこにもこのエラーを見つけることができません.Nexcessの担当者もこれについて何も見つけることができませんでした.

お時間をいただきありがとうございます。

4

2 に答える 2

4

getEntityTablePrefix上記のコメントによると、Magentoは、クラスにそのメソッドが定義されていないオブジェクトのメソッドを呼び出そうとしていることを伝えています。具体的にはこの方法で

#File: app/code/core/Mage/Eav/Model/Entity/Attribute/Abstract.php
public function getBackendTable()
{
    if ($this->_dataTable === null) {
        if ($this->isStatic()) {
            $this->_dataTable = $this->getEntityType()->getValueTablePrefix();
        } else {
            $backendTable = trim($this->_getData('backend_table'));
            if (empty($backendTable)) {
                $entityTable  = array($this->getEntity()->getEntityTablePrefix(), $this->getBackendType());
                $backendTable = $this->getResource()->getTable($entityTable);
            }
            $this->_dataTable = $backendTable;
        }
    }
    return $this->_dataTable;
}

これが次のクラスから発生する場合

Mage_Catalog_Model_Resource_Product_Flat

フラット カタログ データ テーブルを使用しておらず、フラット テーブルで動作するようにコーディングされていないことを前提として、拡張機能やカスタマイズを行っているとのことです。

このようなデバッグ呼び出しをドロップする

if(!is_callable(array($this->getEntity()),'getEntityTablePrefix'))
{
    mageDebugBacktrace();
    //debug_print_backtrace();
    exit;
}

問題のある呼び出しの直前に (もちろん、ローカル コード プールのオーバーライドで)、問題のあるコードを指すコール スタックが出力されます。

于 2012-06-27T20:32:21.707 に答える