0

約 1300 のカテゴリを持つオープンカート ショップを持っていますが、新しいカテゴリを挿入したり、既存のカテゴリを編集したりできません。ページネーション機能をインストールしましたが、カテゴリ表示のみ高速化されています。デバッグを行ったところ、管理パネル内で挿入または編集をクリックすると、以下の関数が無限ループに入ることがわかりました。誰でもこれを修正する方法を教えてもらえますか

public function getCategories($parent_id = 0) {
        $category_data = $this->cache->get('category.' . (int)$this->config->get('config_language_id') . '.' . (int)$parent_id);

        if (!$category_data) {
            $category_data = array();

            $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id) WHERE c.parent_id = '" . (int)$parent_id . "' AND cd.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY c.sort_order, cd.name ASC");

            foreach ($query->rows as $result) {
                $category_data[] = array(
                    'category_id' => $result['category_id'],
                    'name'        => $this->getPath($result['category_id'], $this->config->get('config_language_id')),
                    'status'      => $result['status'],
                    'sort_order'  => $result['sort_order']
                );

                $category_data = array_merge($category_data, $this->getCategories($result['category_id']));
            }   

            $this->cache->set('category.' . (int)$this->config->get('config_language_id') . '.' . (int)$parent_id, $category_data);
        }

        return $category_data;
    }
4

2 に答える 2

1

最初の解決策: データベースにカテゴリの説明もありますか?もしそうなら、MySQLによってロードされているこれらの非常に多くの説明がサーバーに負担をかけている可能性があります。クエリを最適化して、必要な列のみを選択してください。クエリは次のように変更できます。 $query = $this->db->query("SELECT c.category_id, cd.name FROM ...

2番目の解決策 あなたはかつて私の問題を解決したもう1つのデバッグトリックを行うことができます。エコーステートメントを追加します。

echo $result['name'];
$category_data = array_merge($category_data, $this->getCategories($result['category_id']));` `

このようにして、プロセスがハングしたカテゴリの正確な場所を知ることができます。その特定のカテゴリのみに問題がある可能性があります。

3番目の解決策 変更してみてください

'name' => $this->getPath($result['category_id'], $this->config->get('config_language_id')),

に:

'name' => $result['name'],

お役に立てれば。

于 2012-12-02T17:05:16.307 に答える
0

私には現在有効な解決策がありますが、永続的ではありません...それが正しい方法であるかどうかはわかりませんが、私にとってはうまくいきます。クエリをこれに変更しました

$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "category c ORDER BY c.parent_id,c.sort_order");

そしてコメントオフ

//$category_data = array_merge($category_data, $this->getCategories($result['category_id']));

これは現在私にとってはうまくいきますが、それが正しい方法であるかどうかはわかりません。みんなの迅速な助けに感謝します。

于 2012-11-29T07:47:27.830 に答える