バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > 商品一覧(ソート)を思い通りにしたいのですが・・・

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
zeory
投稿日時: 2012/12/17 16:35
対応状況: −−−
新米
登録日: 2012/12/17
居住地:
投稿: 6
商品一覧(ソート)を思い通りにしたいのですが・・・
[EC-CUBE] 2.12.2
[PHP] 5.1.6
[データベース] MySQL 5.0.77

商品一覧で、納品目安順(dtb_productsのdeliv_date_id)で、かつ、商品ステータス順(dtb_product_statusのproduct_status_id)
にしたいと思っています。

LC_Page_Products_List.phpの205行目あたりの下記部分をいじればいいと思うのですが
どのようにすればいいのか、ご教授ください。


default:
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';
}
$order = <<< __EOS__
(
SELECT
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
ORDER BY T3.rank DESC, T2.rank DESC
LIMIT 1
) DESC
,product_id DESC
__EOS__;
$objQuery->setOrder($order);
break;



表現が難しいのですが、カテゴリーを選択しない状態では、
カテゴリーも、商品IDも関係なく、納品目安順かつ商品ステータス順に並べ替えたいと思っています。

カテゴリーを選択した状態でも、選択したカテゴリーの中で、納品目安順かつ商品ステータス順に表示したいです。

SC_Product.phpもいじらなければならないとなれば、そこも併せてご教授頂ければと思います。

よろしくお願い致します。
kanagettyo
投稿日時: 2012/12/19 14:31
対応状況: −−−
半人前
登録日: 2012/12/13
居住地:
投稿: 26
Re: 商品一覧(ソート)を思い通りにしたいのですが・・・
$objQuery->setOrder($order)にてソートが実行されます。
また、setOrder($order)は「'ORDR BY' . $order」のようになっていると思います。
なので、setOrder($order)の$order部分に、ソートを実行するSQL文を指定してあげれば想定された動作になるかと思います。

投稿者さまの場合であれば…
$order = 'dtb_products.deliv_date_id DESC ,dtb_product_status.product_status_id DESC';
$objQuery->setOrder($order);
という感じでしょうか。(ちなみに私の環境では、「setOrder」の「O」は小文字でしたが…)

もしシステムエラーが発生した場合は、以下のような可能性があります。
?「dtb_products.deliv_date_id」か「dtb_product_status.product_status_id」がデータベースに存在しない
?取得結果に「deliv_date_id」か「product_status_id」が存在しない

最後に個人的な疑問ですが、「deliv_date_id」と「product_status_id」のソートで投稿者様の意図した並び替えになりますでしょうか?
両者の「id」が、求めている「納品目安」や「商品ステータス」を表しているか不安でした。杞憂であれば良いのですが…
zeory
投稿日時: 2012/12/19 17:41
対応状況: −−−
新米
登録日: 2012/12/17
居住地:
投稿: 6
Re: 商品一覧(ソート)を思い通りにしたいのですが・・・
kanagettyo様 ありがとうございます。

せっかく教えていただいたのですが、私の環境では、システムエラーとなってしまいました。


そもそも

> SELECT
> T3.rank * 2147483648 + T2.rank

この行の意味がわかりません。。

このデフォルトの書き方が理解できないので、思い通りの表示順にならないのではないかと思っています。
これだと大きいただの数字になってしまう気がします。
これは数字で表示順を決めるという特別な手法なのでしょうか?
かなり調べたのですが、わからず、どうもこの行がネックな気がします。。。


1週間くらいこの問題から抜け出せずにいます。。。

SQLを勉強したらいいのか、MVCについて勉強したらいいのか、どこからのアプローチでこの問題を解決したらいいのかさえわからなくなっています。。

orz

kanagettyo
投稿日時: 2012/12/19 18:56
対応状況: −−−
半人前
登録日: 2012/12/13
居住地:
投稿: 26
Re: 商品一覧(ソート)を思い通りにしたいのですが・・・
> T3.rank * 2147483648 + T2.rank
あまり意識した事がなかったので、考えてみました。

2147483648はphpのint型の上限に引っかかる値なので…
この値を超える場合はintからfloatの値になりそうですね。
T3.rank(int) , T2.rank(int)となっていますので、片方をfloatに変更する事で足し算の結果を一意のものにしているのではないでしょうか?

例えば、T3.rankが「1」でT2.rankが「2」のものと…
T3.rankが「2」でT2.rankが「1」のものがあった場合に
単純な足し算ですと、両者とも3となってしまいます。
そこで、片方をintでは表現できない数字に直す事で重複を防いでるような気がします。

ちなみにT3.rankはdtb_categoryのrankで…
T2.rankはdtb_product_categoriesのrankですので、今回の場合であれば使う必要は無いと思われます。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBEペイメント

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

統計情報

総メンバー数は59,208名です
総投稿数は95,090件です

投稿数ランキング

1
seasoft
7332
2
AMUAMU
2712
3
nanasess
2035
4
468
1979
5
yuh
1612
6
umebius
1562
7
red
1391
8
h_tanaka
971
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.