バージョン選択

フォーラム

メニュー

オンライン状況

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

PR

デザインテンプレート EC-CUBE3.0版が登場!
広告掲載について

サイト内検索

質問 > フロント機能 > 注文履歴一覧に商品名を表示すると商品数=注文件数になる

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
himajin
投稿日時: 2017/5/16 17:17
対応状況: 確認中
新米
登録日: 2017/5/16
居住地:
投稿: 2
注文履歴一覧に商品名を表示すると商品数=注文件数になる
▼テンプレート
[EC-CUBE]2.13
[レンタルサーバ]GMO iclusta
[OS] win10
[PHP] 5.6
[データベース] Mysql
[ブラウザ]firefox
[導入プラグインの有無]なし
[カスタマイズの有無] あり

いつもお世話になっております。
ECCUBE初心者です。

MYページの注文履歴一覧のお届け先を商品名に変更しましたが、
1つの受注で2つ以上の商品の購入がある時に商品ひとつひとつが表示され、
注文履歴も商品数分になってしまいました。
例えば、購入件数自体は1なのに、商品数が2つあると、
「2件の購入履歴があります。」と表示されてしまいます。
金額も注文の合計金額が商品の件数分表示されます。

注文(order_id)別でまとめて表示させたいですが、何か良い方法はないでしょうか。
ご教授いただければ幸いです。
468
投稿日時: 2017/5/17 8:32
対応状況: −−−
仙人
登録日: 2008/10/26
居住地:
投稿: 536
Re: 注文履歴一覧に商品名を表示すると商品数=注文件数になる
function lfGetOrderHistory()の中で処理されているSQLに
dtb_order_detailテーブルをJOINで追加されたのでしょうか?

JOINした場合、SQLの結果行数がdtb_order_detailの件数になってしまい、
合計金額や件数など修正が必要な箇所が多いと思いますので、
JOINするよりは、
dtb_orderのSELECTした結果をループさせて、
ループ内でdtb_order_detailの内容を取得するSQLを発行したほうが既存部分は変更する必要が無く、
受注明細部分を追記するだけとなりますので、実装が楽ではないかと思います。
(DB接続が複数発生するので、あまり効率の良い方法ではありませんが)

LC_Page_Mypage.php function action()内
$array = $this->arrOrder;
foreach ($array as $k => $v) {
    $array[$k]['detail'] = **ここでdtb_order_detailの結果を取得する処理**(引数に$v['order_id']);
}
$this->arrOrder = $array;


index.tpl 購入履歴のループ内
<!--{section name=cnt loop=$arrOrder}-->

    <!--{section name=cnt2 loop=$arrOrder[cnt].detail}-->
        //ここで受注詳細情報を表示
    <!--{/section}-->

<!--{/section}-->


コードはあくまでイメージですので、実際はもっと記述が増えると思いますが・・・。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
■360°画像ビューワーimg360
■ECCUBE技術資料blog

yuh
投稿日時: 2017/5/17 12:18
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1326
Re: 注文履歴一覧に商品名を表示すると商品数=注文件数になる
その場合はdtb_order_detailをGROUP CONCAT で商品名:数量(改行)でまとめて1つの項目として取得すると楽に表示させることができますよ。


----------------
ec-cube2系の速度UPしてみました。(商品数:100万件)
http://speedtest2.ec-lab.net/products/list.php?category_id=15
ec-cube2系最速!(自称)

himajin
投稿日時: 2017/5/17 15:29
対応状況: −−−
新米
登録日: 2017/5/16
居住地:
投稿: 2
Re: 注文履歴一覧に商品名を表示すると商品数=注文件数になる
ありがとうございます!

GROUP CONCATをネットで調べ、以下のテストをしてみた結果、間違いなくこれで大丈夫だと思います。

ただし、これをページで実行させる方法がわかりません…
どうか助けてください。

SELECT od.order_id, GROUP_CONCAT(de.product_name) as p_name 
FROM  dtb_order od, dtb_order_detail de 
WHERE od.order_id = de.order_id  
GROUP BY od.order_id
468
投稿日時: 2017/5/17 22:31
対応状況: −−−
仙人
登録日: 2008/10/26
居住地:
投稿: 536
Re: 注文履歴一覧に商品名を表示すると商品数=注文件数になる
/data/class/pages/mypage/LC_Page_Mypage.php 118行目付近の
function lfGetOrderHistory()にSQLを実行する記述がありますので、
これを変更すれば良いのではないでしょうか?
ただ、ここの記述にgroup byをセットする記述が無いので、
$objQuery->setOrder($order);
の次の行あたりに
$objQuery->setGroupBy('od.order_id');
を追記する必要があると思います。

>yuhさん
GROUP_CONCAT()は初めて知りました。
便利な関数があるのですね。
いつも2つSQLを書いていたので勉強になりました。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
■360°画像ビューワーimg360
■ECCUBE技術資料blog

yuh
投稿日時: 2017/5/23 0:52
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1326
Re: 注文履歴一覧に商品名を表示すると商品数=注文件数になる

lfGetOrderHistoryの

return $objQuery->select($col, $from, $where, $arrWhereVal);

の変わりに

$query = ' 
SELECT 
  order_id, 
  create_date, 
  payment_id,
  payment_total, 
  status, 
  ( 
    SELECT 
        GROUP_CONCAT(product_name separator "\n" ) 
    FROM 
        dtb_order_detail 
    WHERE 
        order_id = dtb_order.order_id 
  ) as product_name 
FROM 
  dtb_order 
WHERE 
  del_flg = 0 AND 
  customer_id = ? 
ORDER BY 
  order_id DESC'; 
return $objQuery->getAll($query,array($customer_id,SEARCH_PMAX, $startno));

こんな感じで書けばいけるんじゃないですか?
テストしてないんで動作はわかりませんが。
その処理の先にCOUNTしてる部分とかあるんで、その下に別にクエリを書いて処理を追加する感じです。
COUNT部分もSQL_CALC_FOUND_ROWS使って置き換えたい所ですが。


----------------
ec-cube2系の速度UPしてみました。(商品数:100万件)
http://speedtest2.ec-lab.net/products/list.php?category_id=15
ec-cube2系最速!(自称)

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

 



ログイン


EC-CUBEガイドブック

統計情報

総メンバー数は19,366名です
総投稿数は81,313件です

投稿数ランキング

1
seasoft
7331
2
AMUAMU
2712
3
nanasess
1619
4
yuh
1326
5
red
1049
6
fukap
907
7
shutta
827
8 ramrun 789
9
tsuji
778
10
umebius
670
11
tao_s
646
12 sumida 637
13
homan
633
14 karin 609
15 DELIGHT 571
16
468
536
17
patapata
502
18
flealog
483
19 tonton 436
20
ecbg
387


ネットショップの壺

EC-CUBEガイドブック
Copyright© LOCKON CO.,LTD. All Rights Reserved.