バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > 商品一覧を価格順で表示したい(コミュ版)

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
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;
}


----------------
------
EC-CUBEバージョン 2.4.1-comu
PHPバージョン PHP 5.2.5
DBバージョン PostgreSQL 8.2.4

seasoft
投稿日時: 2010/1/8 15:32
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7367
Re: 商品一覧を価格順で表示したい(コミュ版)
当該改訂を担当しましたシーソフトの塚田です。

2.3.0-rc1 のときに、どのような書き換えを行なったか、変更前後のコードをご提示いただくと話が早いかと思います。


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

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;
*/


----------------
------
EC-CUBEバージョン 2.4.1-comu
PHPバージョン PHP 5.2.5
DBバージョン PostgreSQL 8.2.4

seasoft
投稿日時: 2010/1/8 17:20
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7367
Re: 商品一覧を価格順で表示したい(コミュ版)
switch case をどうするかは、お考えいただくとして・・・


並び順の指定は、
$order = 'price02_min DESC, product_id DESC';
辺りで良さそうな気がします。


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

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;
-------------------------------------------

に書き換える





----------------
------
EC-CUBEバージョン 2.4.1-comu
PHPバージョン PHP 5.2.5
DBバージョン PostgreSQL 8.2.4

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つの商品は、カテゴリが違っても、価格は同一ですので、複雑にする必要がないのです。)



ちなみに、このスレッドを後にご覧になった方のためにも、補足しておきますと、同一価格の商品が多い場合などで、同一価格内の並び順については現状を維持したい場合・・・


$dtb_product_categories = 'dtb_product_categories';
}
$order = <<< __EOS__
price02_min DESC,
(
SELECT
T3.rank
FROM

のように記述すると、価格順と指定順位を両立できると思います。(未検証)

ただし colony 様のコードよりも、パフォーマンスは幾分か劣ると思います。


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

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秒かかりません。
すばらしいですね。


ありがとうございました。




----------------
------
EC-CUBEバージョン 2.4.1-comu
PHPバージョン PHP 5.2.5
DBバージョン PostgreSQL 8.2.4

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


 



ログイン


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

統計情報

総メンバー数は89,381名です
総投稿数は110,082件です

投稿数ランキング

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