バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > 商品一覧ページで在庫なしの商品は表示順を後にしたい

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
mizuvan
投稿日時: 2015/1/22 17:51
対応状況: −−−
長老
登録日: 2013/3/26
居住地:
投稿: 253
商品一覧ページで在庫なしの商品は表示順を後にしたい
商品一覧で価格順とした場合に、安いものから売れていってしまうので

価格順としたら次の仕入れまで品切れ商品だらけとなってしまいます。

ただ、非表示にはしたくないので価格順(安いものから)かつ在庫切れは後のほうにしたいと思っています。

現在、

data/class/pages/products/LC_Page_Products_List.php


        // 表示順序
        switch ($this->orderby) {
            // 販売価格が安い順
            case 'price':
                $objProduct->setProductsOrder('price02', 'dtb_products_class', 'ASC');
                break;



上記の部分に下記の条件を追加したいのです。



		$objProduct->setProductsOrder('stock', 'dtb_products_class', 'DESC');



switch 文の作り方がよくわからず、どなたかアドバイスいただけないでしょうか


まったく分かっていないので下記の通りやったりしています・・

        // 表示順序
        switch ($this->orderby) {
            // 販売価格が安い順
            case 'price':
                $objProduct->setProductsOrder('price02', 'dtb_products_class', 'ASC');
		$objProduct->setProductsOrder('stock', 'dtb_products_class', 'DESC');
                break;



どうやれば複数の処理を一つの条件にまとめられるのでしょうか?
tsuji
投稿日時: 2015/1/22 18:52
対応状況: −−−
仙人
登録日: 2013/11/19
居住地:
投稿: 958
Re: 商品一覧ページで在庫なしの商品は表示順を後にしたい
mizuvan 様

最終的な並び順を取得している部分は下記です。

        $arrProductId = $objProduct->findProductIdsOrder($objQuery, array_merge($searchCondition['arrval'], $arrOrderVal));


それで中身を見てみると、条件文に$objQuery->order == ''
とあるので、先にorderを入れてしまえば、うまくいけるかと思います。
        if (is_array($this->arrOrderData) and $objQuery->order == '') {
            $o_col = $this->arrOrderData['col'];
            $o_table = $this->arrOrderData['table'];
            $o_order = $this->arrOrderData['order'];
            $objQuery->setOrder("T2.$o_col $o_order");
            $sub_sql = $objQuery->getSql($o_col, "$o_table AS T2", 'T2.product_id = alldtl.product_id');
            $sub_sql = $objQuery->dbFactory->addLimitOffset($sub_sql, 1);

            $objQuery->setOrder("($sub_sql) $o_order, product_id");
        }


----------------
****************************************
株式会社システムフレンド
辻 拓也(takuya tsuji)
改造専門店・EC-CUBE工房
****************************************

yuh
投稿日時: 2015/1/22 18:55
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1819
Re: 商品一覧ページで在庫なしの商品は表示順を後にしたい

                $col = 'T3.stock_unlimited * 2147483648 + T3.stock as rank';
                $from = "dtb_products_class T3";
                $where = 'T3.product_id = alldtl.product_id';
                $objQuery->setOrder('T3.price02 ASC, T3.stock_unlimited * 2147483648 + T3.stock DESC');
                $sub_sql = $objQuery->getSql($col, $from, $where);
                $sub_sql = $objQuery->dbFactory->addLimitOffset($sub_sql, 1);

                $objQuery->setOrder("($sub_sql) DESC ,product_id DESC");

こんな感じでしょうか?
テストはしてないので試してみてください
mizuvan
投稿日時: 2015/1/23 17:01
対応状況: −−−
長老
登録日: 2013/3/26
居住地:
投稿: 253
Re: 商品一覧ページで在庫なしの商品は表示順を後にしたい
tsuji様ありがとうございます!

すみません、よく意味がわからなかったのですが

下記のものを


        if (is_array($this->arrOrderData) and $objQuery->order == '') {
            $o_col = $this->arrOrderData['col'];
            $o_table = $this->arrOrderData['table'];
            $o_order = $this->arrOrderData['order'];
            $objQuery->setOrder("T2.$o_col $o_order");
            $sub_sql = $objQuery->getSql($o_col, "$o_table AS T2", 'T2.product_id = alldtl.product_id');
            $sub_sql = $objQuery->dbFactory->addLimitOffset($sub_sql, 1);

            $objQuery->setOrder("($sub_sql) $o_order, product_id");
        }


下記の上に追記するようなことなのでしょうか

                if (strlen($searchCondition['where_category']) >= 1) {
                    $dtb_product_categories = '(SELECT * FROM dtb_product_categories WHERE '.$searchCondition['where_category'].')';

                    $arrOrderVal           = $searchCondition['arrvalCategory'];
                } else {
                    $dtb_product_categories = 'dtb_product_categories';
                }

                $col = 'T3.rank * 2147483648 + T2.rank';
                $from = "$dtb_product_categories T2 JOIN dtb_category T3 ON T2.category_id = T3.category_id";
                $where = 'T2.product_id = alldtl.product_id';
                $objQuery->setOrder('T3.rank DESC, T2.rank DESC');
                $sub_sql = $objQuery->getSql($col, $from, $where);
                $sub_sql = $objQuery->dbFactory->addLimitOffset($sub_sql, 1);


根本的にわかっていないのですみません

もう一度ご説明いただけないでしょうか
mizuvan
投稿日時: 2015/1/23 17:04
対応状況: −−−
長老
登録日: 2013/3/26
居住地:
投稿: 253
Re: 商品一覧ページで在庫なしの商品は表示順を後にしたい
yuh様、今回もありがとうございます!

置き換えてみましたが、価格順にしたときに在庫が無いものは後回しになっていませんでした・・

デフォルトの状態では、在庫なしものを最後にもっていくことが実現できているので今回のものは、常に在庫なしのものが後回しになるというプログラムだったと理解で正しいでしょうか
yuh
投稿日時: 2015/1/23 18:16
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1819
Re: 商品一覧ページで在庫なしの商品は表示順を後にしたい

                $col = 'CASE WHEN T3.stock = 0 AND T3.stock_unlimited = 0 THEN 99999999 ELSE T3.price02 END ';
                $from = "dtb_products_class T3";
                $where = 'T3.product_id = alldtl.product_id';
                $objQuery->setOrder('CASE WHEN stock = 0 AND stock_unlimited = 0 THEN 99999999 ELSE price02 END ASC');
                $sub_sql = $objQuery->getSql($col, $from, $where);
                $sub_sql = $objQuery->dbFactory->addLimitOffset($sub_sql, 1);
                $objQuery->setOrder("($sub_sql) ASC ,product_id DESC");

こちらでどうでしょう?
mizuvan
投稿日時: 2015/1/23 19:12
対応状況: −−−
長老
登録日: 2013/3/26
居住地:
投稿: 253
Re: 商品一覧ページで在庫なしの商品は表示順を後にしたい
yuh様、何度もありがとうございます。

何度も教えていただいていたのに事前にいってなかったことがありました。他にもカスタマイズしているところがありまして
商品一覧ではカテゴリー毎に表示を切り替えています。
その為か下記のエラーが出ているのでしょうか

2回目に教えていただいたものも試しましたが価格順の際に在庫無しのものが後回しにならない状態でした。
もし何かしらキャッシュが残っていて反映されていないだけだった場合には申し訳ありません。

ただし、一覧ページをそのまま表示させた場合にはちゃんと在庫なしの商品は後回しになっていました。

引用:
2015/01/23 19:06:22 [***/products/list.php] Warning(E_WARNING): Missing argument 2 for LC_Page_Products_List::doDefault(), called in ***/data/class_extends/page_extends/products/LC_Page_Products_List_Ex.php on line 124 and defined on [***/data/class/pages/products/LC_Page_Products_List.php(515)] from ***.***.***.***
customer_id =
***/products/list.php(29): LC_Page_Products_List_Ex->process
***/data/class_extends/page_extends/products/LC_Page_Products_List_Ex.php(56): LC_Page_Products_List->process
***/data/class/pages/products/LC_Page_Products_List.php(83): LC_Page_Products_List->action
***/data/class/pages/products/LC_Page_Products_List.php(153): LC_Page_Products_List_Ex->doDefault
***/data/class_extends/page_extends/products/LC_Page_Products_List_Ex.php(124): LC_Page_Products_List->doDefault
***/data/class/pages/products/LC_Page_Products_List.php(515): SC_Helper_HandleError::handle_warning
yuh
投稿日時: 2015/1/23 20:27
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1819
Re: 商品一覧ページで在庫なしの商品は表示順を後にしたい
さすがにカスタマイズが入っていた場合はわからないです。

LC_Page_Products_List_Ex.php(124)のdoDefaultを呼んでる部分で2つ目の引数が無いのが原因と思われますが、順番のソートに関しては関係ないと思うのでカスタマイズされた方に言って修正してください。

mizuvan
投稿日時: 2015/1/28 15:08
対応状況: 確認中
長老
登録日: 2013/3/26
居住地:
投稿: 253
Re: 商品一覧ページで在庫なしの商品は表示順を後にしたい
yuh様、いつもありがとうございます!

カスタマイズをどこかのサイトを参考にしたりして自分でやったり、専門の方にお願いしたりとぐちゃぐちゃになってしまっているので一度専門の方に一通りみてもらうことにします。

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1638
8
red
1570
9
mcontact
1285
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.