バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

 > フロント機能 > 商品一覧を dtb_product_category.rank で並び替えたい

フロント機能

新規スレッドを追加する

フラット表示 前のトピック | 次のトピック
投稿者 スレッド
raccoon
投稿日時: 2016/7/10 2:56
対応状況: −−−
新米
登録日: 2016/7/10
居住地:
投稿: 3
商品一覧を dtb_product_category.rank で並び替えたい
商品のおすすめ順並び替えは
こちらのプラグインを使っています:
https://github.com/EC-CUBE/ProductRank-plugin

マスターデータ管理から、mtb_product_list_order_by に 「3, おすすめ順」を登録し、
商品おすすめ順を上記プラグインで設定しました。

フロントの商品一覧のソート機能は提供されていないみたいなので、
とりあえず、
ProductRepository#getQueryBuilderBySearchData
を直接以下のように変更して試してみました。

変更前:


        // Order By
        // 価格順
        if (!empty($searchData['orderby']) && $searchData['orderby']->getId() == '1') {
            //@see http://doctrine-orm.readthedocs.org/en/latest/reference/dql-doctrine-query-language.html
            $qb->addSelect('MIN(pc.price02) as HIDDEN price02_min');
            $qb->innerJoin('p.ProductClasses', 'pc');
            $qb->groupBy('p');
            $qb->orderBy('price02_min', 'ASC');
            // 新着順
        } else if (!empty($searchData['orderby']) && $searchData['orderby']->getId() == '2') {
            $qb->orderBy('p.create_date', 'DESC');
        } else {
            if ($categoryJoin === false) {
                $qb
                    ->leftJoin('p.ProductCategories', 'pct')
                    ->leftJoin('pct.Category', 'c');
            }
            $qb
                ->addOrderBy('p.id', 'DESC');
        }
        return $qb;



変更後(おすすめ順追加):


        // Order By
        // 価格順
        if (!empty($searchData['orderby']) && $searchData['orderby']->getId() == '1') {
            //@see http://doctrine-orm.readthedocs.org/en/latest/reference/dql-doctrine-query-language.html
            $qb->addSelect('MIN(pc.price02) as HIDDEN price02_min');
            $qb->innerJoin('p.ProductClasses', 'pc');
            $qb->groupBy('p');
            $qb->orderBy('price02_min', 'ASC');
            // 新着順
        } else if (!empty($searchData['orderby']) && $searchData['orderby']->getId() == '2') {
            $qb->orderBy('p.create_date', 'DESC');
            // おすすめ順
        } else if (!empty($searchData['orderby']) && $searchData['orderby']->getId() == '3') {
            $qb->orderBy('pct.rank', 'DESC');
        } else {
            if ($categoryJoin === false) {
                $qb
                    ->leftJoin('p.ProductCategories', 'pct')
                    ->leftJoin('pct.Category', 'c');
            }
            $qb
                ->addOrderBy('p.id', 'DESC');
        }
        return $qb;


そうすると、子孫カテゴリーを持たないカテゴリーのおすすめ順の場合は、
うまくページャーが機能するのですが、
子孫カテゴリーを持つカテゴリーのおすすめ順の場合は
同じ商品が複数回表示されてしまいます。

xdebugで処理を追っていった所、
Doctrine\ORM\Tools\Pagination\Paginator.phpの151行目の


$ids = array_map('current', $subQuery->getScalarResult());


ここで、実際に表示する商品のid一覧を取得していることがわかりました。
取得のためのSQLは以下のような感じです:


SELECT DISTINCT d0_.product_id AS product_id0,
                d1_.rank AS rank1
FROM dtb_product d0_
INNER JOIN dtb_product_category d1_ ON d0_.product_id = d1_.product_id
INNER JOIN dtb_category d2_ ON d1_.category_id = d2_.category_id
AND (d2_.del_flg = 0)
WHERE (d0_.status = 1
       AND d1_.category_id IN (1, 20, 19, 18, 17, 16, 15, 14))
  AND (d0_.del_flg = 0)
ORDER BY d1_.rank DESC
LIMIT 15 OFFSET 15
;


上の SQLの select の d1_.rank AS rank1 があるために、重複が除去できていない状態だと思いました。なので


SELECT DISTINCT d0_.product_id AS product_id0,
                d1_.rank AS rank1





SELECT DISTINCT d0_.product_id AS product_id0


というふうに、 d1_.rank AS rank1 を追加しないようにしたいのですが、
これはできそうでしょうか。
あるいは、もっと他の方法はありませんでしょうか。
どなたかお知恵をお貸しいただければ幸いです。 m(_ _)m
フラット表示 前のトピック | 次のトピック


題名 投稿者 日時
 » 商品一覧を dtb_product_category.rank で並び替えたい raccoon 2016/7/10 2:56
     Re: 商品一覧を dtb_product_category.rank で並び替えたい DELIGHT 2016/7/10 8:03
       Re: 商品一覧を dtb_product_category.rank で並び替えたい raccoon 2016/7/14 6:17
       Re: 商品一覧を dtb_product_category.rank で並び替えたい raccoon 2016/7/14 6:18

 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1567
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
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.