0

我有一个大约 1300 个类别的 opencart 商店,我无法插入新类别或编辑现有类别。我已经安装了分页功能,但它只加快了类别视图。我做了一些调试,发现一旦我在管理面板中单击插入或编辑,下面的函数就会进入无限循环。谁能帮我解决这个问题

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 ...

第二种解决方案 您可以再做一个调试技巧,它曾经解决了我的问题。添加回声语句:

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

通过这种方式,您将了解进程挂起的类别的确切位置。仅该特定类别可能存在一些问题。

第三个解决方案 尝试改变

'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 回答