バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > 在庫のない商品を後ろに表示したい

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
akiakihi
投稿日時: 2019/6/3 15:36
対応状況: 保留
一人前
登録日: 2014/7/17
居住地: 兵庫県
投稿: 83
在庫のない商品を後ろに表示したい
------------------------------------------------
[EC-CUBE] 3.0.17
[レンタルサーバ]さくらインターネット
[OS] Windows10
[PHP] PHP Version 7.2.17
[データベース] MySQL 5.7
[ブラウザ] Chrome
------------------------------------------------

在庫切れ商品の並び替え/表示についてのご相談
こちらを参考にしてみたところ、エラーで表示されなくなってしまったので

EC-CUBE3在庫数順(在庫切れ商品後ろ)でエラーの件
こちらのサイト様を参考に、新着順表示で下記のようにしたらうまくいきました。


            // 新着順
        } else if (!empty($searchData['orderby']) && $searchData['orderby']->getId() == $config['product_order_newer']) {
            // 在庫切れ商品非表示の設定が有効時対応
            // @see https://github.com/EC-CUBE/ec-cube/issues/1998
            if ($this->app['orm.em']->getFilters()->isEnabled('nostock_hidden') == true) {
                $qb->innerJoin('p.ProductClasses', 'pc');
            }
            $qb->innerJoin('p.ProductClasses', 'pc');            
            $qb->addSelect('pc.stock as HIDDEN stock');
            $qb->orderBy('stock', 'DESC');
            $qb->addOrderBy('p.create_date', 'DESC');
            $qb->addOrderBy('p.id', 'DESC');


が、
価格が低い順、高い順では、groupByがあるためか、$qb->orderBy('stock', 'DESC');を使うことが出来ません。


            // 価格高い順
        } else if (!empty($searchData['orderby']) && $searchData['orderby']->getId() == $config['product_order_price_higher']) {
            $qb->addSelect('MAX(pc.price02) as HIDDEN price02_max');
            $qb->innerJoin('p.ProductClasses', 'pc');
            $qb->addSelect('pc.stock as HIDDEN stock');
            $qb->groupBy('p.id');
            $qb->orderBy('stock', 'DESC');
            $qb->addOrderBy('price02_max', 'DESC');
            $qb->addOrderBy('p.id', 'DESC');



こちらの記述ではエラーとなってしまいカテゴリーページが表示されません。

在庫がないものはsold out表示で価格を表示しないようにしているので、価格順にソートした場合、在庫のない商品が大量に上に来ると、尚更とても見づらくなってしまっています。

在庫がない商品も、検索でショップにたどり着いてくれる可能性があるため、なるべく非表示設定にしたくはありません。
(沢山たまってきたらsold out専用の別カテゴリーに移動してはいますが)

そもそもの基本がわかっていなくて恐縮ですが、価格順においても、在庫のない商品が後ろにまわるようにするにはどうしたらいいか、対策についてご教授いただけますと幸いです。

どうか皆様よろしくお願いいたします。
468
投稿日時: 2019/6/3 16:58
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 2022
Re: 在庫のない商品を後ろに表示したい
$qb->addSelect('MAX(pc.stock) as HIDDEN stock_max');
又は
$qb->addSelect('MIN(pc.stock) as HIDDEN stock_min');
のようにstockに対しても集約関数を利用する必要があるのではないでしょうか?

規格を持っている商品の場合、
在庫がある規格、在庫が切れている規格が混在する可能性があると思いますが、
それらをどう表示するかルールを決定しておく必要があるのではないでしょうか?


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

tao_s
投稿日時: 2019/6/3 17:09
対応状況: −−−
仙人
登録日: 2008/8/20
居住地: 東京
投稿: 783
Re: 在庫のない商品を後ろに表示したい
在庫がなく、入荷予定もない商品は一覧には表示しないようにした方がよくないですか?


----------------
EC-CUBEカスタマイズ相談してください。
緊急のEC-CUBEの障害対応
EC-CUBEカスタマイズブログ

akiakihi
投稿日時: 2019/6/3 23:38
対応状況: 保留
一人前
登録日: 2014/7/17
居住地: 兵庫県
投稿: 83
Re: 在庫のない商品を後ろに表示したい
ありがとうございます。
新着順については、


            // 新着順
        } else if (!empty($searchData['orderby']) && $searchData['orderby']->getId() == $config['product_order_newer']) {
            // 在庫切れ商品非表示の設定が有効時対応
            // @see https://github.com/EC-CUBE/ec-cube/issues/1998
            if ($this->app['orm.em']->getFilters()->isEnabled('nostock_hidden') == true) {
                $qb->innerJoin('p.ProductClasses', 'pc');
            }
	    $qb->innerJoin('p.ProductClasses', 'pc');
	    $qb->addSelect('MAX(pc.stock) as HIDDEN stock_max');			        
            $qb->groupBy('p.id');
	    $qb->orderBy('stock_max', 'DESC');
            $qb->addOrderBy('p.create_date', 'DESC');
            $qb->addOrderBy('p.id', 'DESC');


こちらにしてみました。
ほぼほぼ問題なく表示されています。


価格順については、

            $qb->addSelect('MAX(pc.price02) as HIDDEN price02_max','MAX(pc.stock) as HIDDEN stock_max');
            $qb->innerJoin('p.ProductClasses', 'pc');
            $qb->groupBy('p.id');
	    $qb->orderBy('stock_max', 'DESC');            
            $qb->addOrderBy('price02_max', 'DESC');
            $qb->addOrderBy('p.id', 'DESC');


こうしてみました。
これで問題なく表示されているようですが、なにぶん素人なため、この書き方で本当に正しいのか、自信がありません。。。
暫く様子を見てみますm(_ _)m
akiakihi
投稿日時: 2019/6/3 23:43
対応状況: 保留
一人前
登録日: 2014/7/17
居住地: 兵庫県
投稿: 83
Re: 在庫のない商品を後ろに表示したい
tao_sさま

当店の商品はほとんど全てが一点物なんです。
が、同カテゴリーの似たような商品はいくつかあります。

画像検索等で当店にたどり着いてくださった方が、同カテゴリーの別商品の購入につながれば、と
あえて非表示にせずに置いています。

が、確かにショップに来てくださった方にとっては、在庫なしのものが沢山あると見にくいのも事実。

並び替えで在庫なしのものは後方に追いやりつつ
ある程度たまったら、在庫なしのものはまとめてsold outカテゴリーに移動させて整理しています。m(_ _)m

通常カテゴリーでは在庫なしのものは非表示にして、
sold outカテゴリーに移動したものは表示させる、というやり方の方がいいかもしれませんね・・・。
特定カテゴリだけ在庫なしの物を表示

どちらがいいか迷いつつ、とりあえず、今までやってきた(2系の)やり方を引き継いで実現させてみました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBEペイメント

公式ストアEC-CUBE4系デザインテンプレート続々リリース中

統計情報

総メンバー数は60,914名です
総投稿数は95,430件です

投稿数ランキング

1
seasoft
7332
2
AMUAMU
2712
3
nanasess
2038
4
468
2022
5
yuh
1612
6
umebius
1588
7
red
1399
8
h_tanaka
992
9
fukap
907
10
tsuji
863
11
shutta
835
12 ramrun 789
13
tao_s
783
14 karin 656
15 sumida 641
16
homan
633
17 DELIGHT 571
18
patapata
502
19
flealog
485
20 tonton 437


ネットショップの壺

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

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