以前は知りませんでしたが、Opencart の公式リリースには巨大なバグがあり、商品やカテゴリがたくさんあるストアでは、50 秒かかります!!! ページをロードします。50秒!!! 、コードとグーグルを調べたところ、この行がすべての原因であることをほとんどの人が知っているため、問題が十分に文書化されていることがわかりました。(キャッシュからカウント)
$product_total = $this->model_catalog_product->getTotalProducts($data);
すべての場所に投稿されたソリューションは、この行をコメントアウトすることで構成されていますが、少なくとも $product_total を空に設定すると、少なくとも私にとってはうまく機能します..このように
//$product_total = $this->model_catalog_product->getTotalProducts($data);
$product_total = "";
とにかく、私の問題は解決されました (ページの読み込みは 50 秒ではなく 3 秒でした) が、カウントが欠落していたので、探し続けて、最終的にこの解決策を見つけました。多くの製品とカテゴリで処理されています.. http://ergopho.be/speeding-up-opencart-using-the-cache-class/
基本的に、コードのこのセクション全体を if ブロックでラップし、最初にファイルがキャッシュに存在するかどうかを確認します。そうでない場合は、通常どおり実行し、キャッシュに保存します。その場合は、代わりにキャッシュされたバージョンを使用してください。
Controller/Common/Header.php では、このコードも見つけることができます (記事では、彼はカテゴリでそれを行います)。このファイルのコードもここにあります。
$this->data['categories'] = array();
$categories = $this->model_catalog_category->getCategories(0);
foreach ($categories as $category) {
if ($category['top']) {
// Level 2
$children_data = array();
$children = $this->model_catalog_category->getCategories($category['category_id']);
foreach ($children as $child) {
$data = array(
'filter_category_id' => $child['category_id'],
'filter_sub_category' => true
);
$product_total = $this->model_catalog_product->getTotalProducts($data);
$children_data[] = array(
'name' => $child['name'] . ($this->config->get('config_product_count') ? ' (' . $product_total . ')' : ''),
'href' => $this->url->link('product/category', 'path=' . $category['category_id'] . '_' . $child['category_id'])
);
}
Yo have to wrap all this code into this lines
$this->data['categories'] = $this->cache->get('categories');
if(!count($this->data['categories'])) {
<!--Here goes the above code-->
$this->cache->set('categories', $this->data['categories']);
}
これまでのところ問題なく動作しています。これが他の人の助けになることを願っています。また、これを行うより良い方法があれば、これを探している上級者ではないユーザーがたくさんいることを知っているので、私たちと共有していただければ幸いです。 、 それは素晴らしいことだ。
¿誰かがこのひどく遅いバグのより良い修正を見つけ出すことができますか?
この種の問題が修正された Opencart の次のバージョンに感謝します。
お役に立てれば。平和