質問 > フロント機能 > 商品一覧を価格順で表示したい(コミュ版) |
フロント機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
colony |
投稿日時: 2010/1/8 15:29
対応状況: −−−
|
常連 登録日: 2008/4/24 居住地: 投稿: 49 |
商品一覧を価格順で表示したい(コミュ版) 2.3.0-rc1から、2.4.1-comuへ移行しているのですが
商品一覧の表示を、価格の高い順に表示をしたいのですが、 おそらく LC_Page_Products_List.phpのdefault:の箇所を 修正するのかと思うのですが、2.3.0-rc1の時と記述 内容が変わっているため、移行できません。 どのように変更したらよいかお教えいただけないでしょうか お願いいたします。 ------------------------------------------- コミュ版 LC_Page_Products_List.phpの419行〜 ------------------------------------------- // 表示順序 switch ($this->orderby) { // 販売価格順 case 'price': $order = "price02_min, product_id"; break; // 新着順 case 'date': $order = "create_date DESC, product_id"; break; default: if (strlen($where_category) >= 1) { $dtb_product_categories = "(SELECT * FROM dtb_product_categories WHERE $where_category)"; $arrval_order = array_merge($arrval_category, $arrval_category); } else { $dtb_product_categories = 'dtb_product_categories'; } $order = <<< __EOS__ ( SELECT T3.rank FROM $dtb_product_categories T2 JOIN dtb_category T3 USING (category_id) WHERE T2.product_id = alldtl.product_id ORDER BY T3.rank DESC, T2.rank DESC LIMIT 1 ) DESC ,( SELECT T2.rank FROM $dtb_product_categories T2 JOIN dtb_category T3 USING (category_id) WHERE T2.product_id = alldtl.product_id ORDER BY T3.rank DESC, T2.rank DESC LIMIT 1 ) DESC ,product_id __EOS__; break; }
|
seasoft |
投稿日時: 2010/1/8 15:32
対応状況: −−−
|
神 登録日: 2008/6/4 居住地: 投稿: 7367 |
Re: 商品一覧を価格順で表示したい(コミュ版) 当該改訂を担当しましたシーソフトの塚田です。
2.3.0-rc1 のときに、どのような書き換えを行なったか、変更前後のコードをご提示いただくと話が早いかと思います。
|
colony |
投稿日時: 2010/1/8 15:41
対応状況: −−−
|
常連 登録日: 2008/4/24 居住地: 投稿: 49 |
Re: 商品一覧を価格順で表示したい(コミュ版) seasoft 様
いつもありがとうございます。 LC_Page_Products_List.phpの421行あたりでコードがエスケープされていましたので、「エスケープコード」から「現行コード」へ置き換えています。 意味も分からず、コミュニティーサイトを参考に、コピーペーストで変更を加えたと思います。 よろしくお願いします。 ------------------------- 2.3.0-rc1 現行のコード ------------------------- default: $col = "DISTINCT T1.product_id, product_code_min, product_code_max," . " price01_min, price01_max, price02_min, price02_max," . " stock_min, stock_max, stock_unlimited_min," . " stock_unlimited_max, del_flg, status, name, comment1," . " comment2, comment3, main_list_comment, main_image," . " main_list_image, product_flag, deliv_date_id, sale_limit," . " point_rate, sale_unlimited, create_date, deliv_fee, " . " T4.product_rank, T4.category_rank"; $from = "vw_products_allclass AS T1" . " JOIN (" . " SELECT max(T3.rank) AS category_rank," . " max(T2.rank) AS product_rank," . " T2.product_id" . " FROM dtb_product_categories T2" . " JOIN dtb_category T3 USING (category_id)" . " GROUP BY product_id) AS T4 USING (product_id)"; $order = "price02_min DESC, T4.product_rank DESC"; break; ------------------------- 2.3.0-rc1 エスケープしたコード ------------------------- /* default: $col = "DISTINCT price02_min, product_id, product_code_min, product_code_max," . " name, comment1, comment2, comment3," . " main_list_comment, main_image, main_list_image," . " price01_min, price01_max, price02_max," . " stock_min, stock_max, stock_unlimited_min, stock_unlimited_max," . " point_rate, sale_limit, sale_unlimited, deliv_date_id, deliv_fee," . " status, product_flag, create_date, del_flg"; $from = "vw_products_allclass AS T1"; $order = "price02_min DESC, product_id"; break; default: $col = "DISTINCT T1.product_id, product_code_min, product_code_max," . " price01_min, price01_max, price02_min, price02_max," . " stock_min, stock_max, stock_unlimited_min," . " stock_unlimited_max, del_flg, status, name, comment1," . " comment2, comment3, main_list_comment, main_image," . " main_list_image, product_flag, deliv_date_id, sale_limit," . " point_rate, sale_unlimited, create_date, deliv_fee, " . " T4.product_rank, T4.category_rank"; $from = "vw_products_allclass AS T1" . " JOIN (" . " SELECT max(T3.rank) AS category_rank," . " max(T2.rank) AS product_rank," . " T2.product_id" . " FROM dtb_product_categories T2" . " JOIN dtb_category T3 USING (category_id)" . " GROUP BY product_id) AS T4 USING (product_id)"; $order = "T4.category_rank DESC, T4.product_rank DESC"; break; */
|
seasoft |
投稿日時: 2010/1/8 17:20
対応状況: −−−
|
神 登録日: 2008/6/4 居住地: 投稿: 7367 |
Re: 商品一覧を価格順で表示したい(コミュ版) switch case をどうするかは、お考えいただくとして・・・
並び順の指定は、 $order = 'price02_min DESC, product_id DESC'; 辺りで良さそうな気がします。
|
colony |
投稿日時: 2010/1/9 11:01
対応状況: −−−
|
常連 登録日: 2008/4/24 居住地: 投稿: 49 |
Re: 商品一覧を価格順で表示したい(コミュ版) seasoft 様 お返事ありがとうございます。
次のコードを、お教えいただいたコードに置き換えることで、 デフォルトで、商品リストを価格の高い順に表示させることができました。 ありがとうございました。 でも、$col、$from変数が見あたりませんが、どこにいってしまったのでしょうか? 理由も分からずdefoult:以下を置き換えてしまったので、 システム的に致命的なエラーがあるようでしたら、お教えいただけないでしょうか。 ------------------------------------------- コミュ版 LC_Page_Products_List.phpの432行〜 ------------------------------------------- default: if (strlen($where_category) >= 1) { $dtb_product_categories = "(SELECT * FROM dtb_product_categories WHERE $where_category)"; $arrval_order = array_merge($arrval_category, $arrval_category); } else { $dtb_product_categories = 'dtb_product_categories'; } $order = <<< __EOS__ ( SELECT T3.rank FROM $dtb_product_categories T2 JOIN dtb_category T3 USING (category_id) WHERE T2.product_id = alldtl.product_id ORDER BY T3.rank DESC, T2.rank DESC LIMIT 1 ) DESC ,( SELECT T2.rank FROM $dtb_product_categories T2 JOIN dtb_category T3 USING (category_id) WHERE T2.product_id = alldtl.product_id ORDER BY T3.rank DESC, T2.rank DESC LIMIT 1 ) DESC ,product_id __EOS__; break; ------------------------------------------- を ------------------------------------------- default: $order = "price02_min DESC, product_id DESC"; break; ------------------------------------------- に書き換える
|
seasoft |
投稿日時: 2010/1/9 11:27
対応状況: −−−
|
神 登録日: 2008/6/4 居住地: 投稿: 7367 |
Re: 商品一覧を価格順で表示したい(コミュ版) ざっと見た印象ですと、良いと思いますよ。
> でも、$col、$from変数が見あたりませんが、どこにいってしまったのでしょうか? 正式版では表示順序が変わることで、SELECT句($col)やFROM句($from)まで変わる作りとなっています。 しかし、その仕様は私には非常に無駄に思えたため、EC-CUBEコミュニティ(eccube-comu) では、スマートに改善しました。(スマート過ぎて困惑させてしまいましたかね^^;) 若干メモリを無駄遣いしますが、さほど問題ない範囲だろうと推測しています。 ちなみに、初期の default: がやたらと長いのは、「1つの商品について、複数のカテゴリに割り当てができ、カテゴリごとに別々の商品表示順位を設定できる」という、EC-CUBE の複雑な仕様をクリアするためのコードです。(正式版の $order はもっと短いと思いましたが、バグがあります。) そのような複雑な仕様が不要な場合、colony 様が行なったカスタマイズによって、高速化も図れると思います。(1つの商品は、カテゴリが違っても、価格は同一ですので、複雑にする必要がないのです。) ちなみに、このスレッドを後にご覧になった方のためにも、補足しておきますと、同一価格の商品が多い場合などで、同一価格内の並び順については現状を維持したい場合・・・
のように記述すると、価格順と指定順位を両立できると思います。(未検証) ただし colony 様のコードよりも、パフォーマンスは幾分か劣ると思います。
|
colony |
投稿日時: 2010/1/9 12:56
対応状況: −−−
|
常連 登録日: 2008/4/24 居住地: 投稿: 49 |
Re: 商品一覧を価格順で表示したい(コミュ版) seasoft 様
特にバグもないとのこと、検証ありがとうございました。 EC-CUEは、個々の商品毎に表示順位を設定できるとは今まで気づきませんでした。 単純に $order = "price02_min DESC, product_id DESC"; へ置き換えてしまうと、「商品並び替え」が機能しなくなってしまうので、 seasoft様よりご指示いただいているコードを利用させていただきたいと思います。 また、動作確認をいたしましたので、あわせてご連絡させていただきます。 パフォーマンスも悪くないです。というか、違いが分かりません。(^^; 今回、2.3.0-rc1から、2.4.1-comuへ移行して、1500件ほどのデータを入れていますが、 格段に、パフォーマンスがよくなっているのに驚きました。 2.3.0-rc1では、カテゴリ表示に5〜6秒かかっていたのが、2.4.1-comuでは、1秒かかりません。 すばらしいですね。 ありがとうございました。
|
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |