バージョン選択

フォーラム

メニュー

オンライン状況

65 人のユーザが現在オンラインです。 (52 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 65
もっと...

サイト内検索

質問 > フロント機能 > カテゴリー数が多いと商品一覧が遅い

フロント機能

新規スレッドを追加する

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
h_tanaka
投稿日時: 2018/9/28 10:19
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1646
Re: カテゴリー数が多いと商品一覧が遅い
上記ソースに問題がありましたので、修正します。

src/Eccube/Form/Type/SearchProductType.php(57行目)
src/Eccube/Form/Type/SearchProductBlockType.php(54行目)
        $Categories = $this->app['eccube.repository.category']
            // ->getList(null, true);
            ->findBy(array());


----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

h_tanaka
投稿日時: 2018/5/18 14:15
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1646
Re: カテゴリー数が多いと商品一覧が遅い
自己解決しました。

呼び元側で対応することができました。

src/Eccube/Form/Type/SearchProductType.php(57行目)
src/Eccube/Form/Type/SearchProductBlockType.php(54行目)
        $Categories = array();
        $AllCategories = $this->app['eccube.repository.category']
            // ->getList(null, true);
            ->getList();
        foreach ($AllCategories as $Category) {
            $Parent = $Category->getParent();
            if (!$Parent) {
                $Categories[] = $Category;
                continue;
            }
            $Parent = $Parent->getParent();
            if (!$Parent) {
                $Categories[] = $Category;
                continue;
            }
        }


----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

h_tanaka
投稿日時: 2018/5/16 13:06
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1646
Re: カテゴリー数が多いと商品一覧が遅い
もう一箇所ありました。
こちらもクエリが1000回近く発行されてしまうため、改善する必要があるのですが、どうすればよいでしょうか?

src/Eccube/Repository/CategoryRepository.php
    public function getList(Category $Parent = null, $flat = false)
    {
        $options = $this->app['config']['doctrine_cache'];
        $lifetime = $options['result_cache']['lifetime'];

        $qb = $this->createQueryBuilder('c1')
            ->select('c1, c2, c3, c4, c5')
            ->leftJoin('c1.Children', 'c2')
            ->leftJoin('c2.Children', 'c3')
            ->leftJoin('c3.Children', 'c4')
            ->leftJoin('c4.Children', 'c5')
            ->orderBy('c1.rank', 'DESC')
            ->addOrderBy('c2.rank', 'DESC')
            ->addOrderBy('c3.rank', 'DESC')
            ->addOrderBy('c4.rank', 'DESC')
            ->addOrderBy('c5.rank', 'DESC');

        if ($Parent) {
            $qb->where('c1.Parent = :Parent')->setParameter('Parent', $Parent);
        } else {
            $qb->where('c1.Parent IS NULL');
        }
        $Categories = $qb->getQuery()
            ->useResultCache(true, $lifetime)
            ->getResult();

        if ($flat) {
            $array = array();
            foreach ($Categories as $Category) {
                $array = array_merge($array, $Category->getSelfAndDescendants());    // ★ ここを改善したい
            }
            $Categories = $array;
        }

        return $Categories;
    }


----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

h_tanaka
投稿日時: 2018/5/11 8:54
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1646
Re: カテゴリー数が多いと商品一覧が遅い
なるほど、親カテゴリーの登録は途中のバージョンからなのですね。
勉強になります。


----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

468
投稿日時: 2018/5/11 8:14
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: カテゴリー数が多いと商品一覧が遅い
ご連絡ありがとうございます。
無事動作したという事で安心しました。

3.0.12か3.0.13ぐらいのバージョンで商品登録時に親カテゴリを記録するように仕様変更されていましたので、
商品検索処理において、親→子カテゴリを走査する処理は無くなったと思っていましたが、残っていたのですね。

弊社でもカテゴリが多いサイトでは、該当処理を改修しておきたいと思います。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

h_tanaka
投稿日時: 2018/5/10 17:45
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1646
Re: カテゴリー数が多いと商品一覧が遅い
468 様

ご提案の方法でうまく動作しました。
ありがとうございました!


----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

h_tanaka
投稿日時: 2018/5/9 9:31
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1646
Re: カテゴリー数が多いと商品一覧が遅い
468 様

確かに、パンくずリストを簡略化するために、商品登録および商品CSV登録における親カテゴリーの自動登録処理をコメントアウトしておりました。

商品と親カテゴリーが紐づいているのでしたら先のご提案の方法が有効そうですね。
試してみます。


----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

468
投稿日時: 2018/5/8 20:10
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: カテゴリー数が多いと商品一覧が遅い
インストール直後の状態で、
管理側にて、パーコレータの編集画面を表示してカテゴリにフォークを選択して登録後、
フロント側で「キッチンツール」「食器」で検索してパーコレータが表示されるのを確認していました。

商品データを一括登録されている場合などは、
親カテゴリの情報がdtb_product_categoryに登録されていないのかもしれませんね。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

h_tanaka
投稿日時: 2018/5/8 18:06
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1646
Re: カテゴリー数が多いと商品一覧が遅い
nanasess 様

MySQL 5.6.37 ですね・・。
SQL発行回数を極力少なくして再帰的に子カテゴリーを取得する方法を検討してみます。


----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

nanasess
投稿日時: 2018/5/8 18:04
対応状況: −−−
登録日: 2006/9/9
居住地:
投稿: 2313
Re: カテゴリー数が多いと商品一覧が遅い
PostgreSQL でしたら、再帰クエリが使用できますので、 ORM を使用せずに再帰クエリを使用するようにカスタマイズするのがおすすめです。

MySQL の場合は MySQL8 から再帰クエリが使用できますが、それ以前のバージョンでは、かなり辛いと思います。
(MPTT というアプローチがありますが、難易度高いです。。。 http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/ )
(1) 2 »
スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,851名です
総投稿数は109,989件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1291
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.