バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > 受注管理画面のCSVダウンロードで商品情報を出力していて、1注文の情報を横一列で出力したい

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
tsurtua
投稿日時: 2017/10/20 16:29
対応状況: 開発中
常連
登録日: 2017/3/31
居住地:
投稿: 57
受注管理画面のCSVダウンロードで商品情報を出力していて、1注文の情報を横一列で出力したい
[EC-CUBE] EC-CUBEのバージョン:2.13.5
        新規インストールかアップデートか:新規インストール
[OS] OS:Windows8.1
[PHP] PHPのバージョン:PHP 5.6.24
[データベース] DB:MySQL 5.7.18
[ブラウザ] ブラウザ名:Chome
[導入プラグイン] プラグイン:のし対応 1.3.5/クロネコヤマト カード・後払い一体型決済コア機能プラグイン 1.0


いつもお世話になります。

受注管理画面のCSVダウンロードで注文商品の個数を出力できるようにカスタマイズしており、
1件の注文分は横一列に出力するようにしたいです。

現在、受注管理画面のCSVダウンロードの出力項目は
注文番号、商品番号、商品名、数量(その商品の注文個数、商品がアイスLサイズ、チョコLサイズのとき注文個数の2倍)
を出力するようにカスタマイズしています。
具体的なカスタマイズ内容は、以下です。
SC_Helper_CSV.phpのsfDownloadCsvを以下のようにカスタマイズしています。
受注管理画面のCSVダウンロードを押したときは、該当の情報を出力するSQL文が流れるようにしています。

public function sfDownloadCsv($csv_id, $where = '', $arrVal = array(), $order = '', $is_download = false)
{
$objQuery =& SC_Query_Ex::getSingletonInstance();

// CSV出力タイトル行の作成
$arrOutput = SC_Utils_Ex::sfSwapArray($this->sfGetCsvOutput($csv_id, 'status = ' . CSV_COLUMN_STATUS_FLG_ENABLE));
if (count($arrOutput) <= 0) return false; // 失敗終了
$arrOutputCols = $arrOutput['col'];

$cols = SC_Utils_Ex::sfGetCommaList($arrOutputCols, true);

// 商品の場合
if ($csv_id == 1) {
// この WHERE 句を足さないと無効な規格も出力される。現行仕様と合わせる為追加。
$inner_where = 'dtb_products_class.del_flg = 0';
$from = SC_Product_Ex::prdclsSQL($inner_where);
// 会員の場合
} elseif ($csv_id == 2) {
$from = 'dtb_customer';
// 注文の場合
} elseif ($csv_id == 3) {
$from = 'dtb_order';
// レビューの場合
} elseif ($csv_id == 4) {
$from = 'dtb_review AS A INNER JOIN dtb_products AS B on A.product_id = B.product_id';
// カテゴリの場合
} elseif ($csv_id == 5) {
$from = 'dtb_category';
}

$objQuery->setOrder($order);
//CSVフォーマットIDが3(受注管理画面からのCSVダウンロード)のとき、CSVダウンロードの検索クエリとヘッダーを変更
if($csv_id == 3){
//受注管理画面からCSVダウンロードをする際の検索クエリをカスタマイズ
//CSVの出力項目は、注文番号、商品番号、商品名、個数(商品がアイスLサイズ、チョコLサイズのとき注文個数の2倍)
$sql = "
SELECT
dtb_order.order_id,
dtb_order_detail.product_code,
dtb_order_detail.product_name,
CASE
WHEN
dtb_order_detail.product_code = '003' or dtb_order_detail.product_code = '006'
THEN
dtb_order_detail.quantity * 2
ELSE
dtb_order_detail.quantity
END as quantity
FROM
dtb_order INNER JOIN
dtb_order_detail ON dtb_order.order_id = dtb_order_detail.order_id
WHERE ". $where. "
ORDER BY
dtb_order.order_id asc";

//CSVファイルのヘッダーをすべて削除して更新
unset($arrOutput['disp_name']);
$arrOutput['disp_name'] = array("受注番号","品番","商品名","数量");
} else {
$sql = $objQuery->getSql($cols, $from, $where);
}

return $this->sfDownloadCsvFromSql($sql, $arrVal, $this->arrSubnavi[$csv_id], $arrOutput['disp_name'], $is_download);
}


以上のカスタマイズにより、
現在はCSVファイルは以下例のように出力されています。

受注番号,品番,商品名,数量
4224,3,アイス,4
4224,7,チョコ,1
4225,6,ケーキ,6
4226,6,ケーキ,2

これを、

受注番号,品番,商品名,数量
4224,3,アイス,4,4224,7,チョコ,1
4225,6,ケーキ,6
4226,6,ケーキ,2

もしくは、

受注番号,品番,商品名,数量
4224,3,アイス,4,7,チョコ,1
4225,6,ケーキ,6
4226,6,ケーキ,2

としたいです。
例でいうと、
受注番号が4224の分の注文を横一列に
ということです。
どちらかというと後者が理想で、これは4224の注文の二商品目以降の情報には受注番号がありません。

実装方法として、
SC_Helper_CSV.phpのcbOutputCSVの
fputcsv($this->fpOutput, $data);

辺りをカスタマイズすればいい気はするのですが、分かりません。
fputcsvもEC-CUBEで作られたメソッドでは無いですし、、


分かる方いらっしゃいましたら、どうかご教示ください。

yuh
投稿日時: 2017/10/20 17:07
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1818
Re: 受注管理画面のCSVダウンロードで商ン情報をだしていて、1注文の情報を横一列で出力したい

SELECT
    GROUP_CONCAT(
        CONCAT(
            dtb_order.order_id,
            ',',
            dtb_order_detail.product_code,
            ',',
            dtb_order_detail.product_name,
            ',',
            CASE
                WHEN
                    dtb_order_detail.product_code = '003' or dtb_order_detail.product_code = '006'
                THEN
                    dtb_order_detail.quantity * 2
                ELSE
                    dtb_order_detail.quantity 
            END
        ) ORDER BY dtb_order_detail.order_detail_id 
         DESC SEPARATOR ','
    )
FROM
    dtb_order INNER JOIN 
    dtb_order_detail ON dtb_order.order_id = dtb_order_detail.order_id 
GROUP BY dtb_order.order_id

多分こんな感じで、CSV出力周りを変更してあげればできるはず。


----------------


http://ec-lab.net/

tsurtua
投稿日時: 2017/10/20 17:25
対応状況: −−−
常連
登録日: 2017/3/31
居住地:
投稿: 57
Re: 受注管理画面のCSVダウンロードで商ン情報をだしていて、1注文の情報を横一列で出力したい
yuh様引き続きありがとうございます。

試してみたところ、
確かに1注文の情報が横一列で出力されました。
ですが、CSVファイルをエクセルで開いたところ
1注文の情報すべてが1つのセル内に入ってしまっています。
実際にはエクセルで開いて運用するので1情報を1つのセルでひょうじさせたいです。

分かりますでしょうか?


追記、
教えて頂いたクエリに
WHERE ". $where. "
がなかったので、
dtb_order_detail ON dtb_order.order_id = dtb_order_detail.order_id
の後に追加しました。
yuh
投稿日時: 2017/10/20 17:42
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1818
Re: 受注管理画面のCSVダウンロードで商ン情報をだしていて、1注文の情報を横一列で出力したい
CSV出力周りで自動的に"で囲むように処理が入ってるので、その処理を使用せずに別途CSVを出力する部分を作ればできるかと。


----------------


http://ec-lab.net/

tsurtua
投稿日時: 2017/10/20 17:45
対応状況: −−−
常連
登録日: 2017/3/31
居住地:
投稿: 57
Re: 受注管理画面のCSVダウンロードで商ン情報をだしていて、1注文の情報を横一列で出力したい
確かに
サクラエディタで開くと
各列の最初と最後に"がありました。

今までは"が無かったのになぜ今回急に現れたのでしょう?
yuh
投稿日時: 2017/10/20 17:59
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1818
Re: 受注管理画面のCSVダウンロードで商ン情報をだしていて、1注文の情報を横一列で出力したい
データの内部に','が入ってるからです。
出力するCSVのカラムが可変の為、すべてSQL上で組み立てるやり方で提示しているので、それに応じたCSVの出力をする必要があります。


----------------


http://ec-lab.net/

tsurtua
投稿日時: 2017/10/23 9:27
対応状況: −−−
常連
登録日: 2017/3/31
居住地:
投稿: 57
Re: 受注管理画面のCSVダウンロードで商ン情報をだしていて、1注文の情報を横一列で出力したい
なるほど、ここに来て意外と難しそうになってきましたね。。

CSV出力周りで自動的に"で囲むように処理しているところはどこでしょうか?見つけきれませんでした。
また、”それに応じたCSVの出力する”とはどのようにしたらよいのでしょうか?

分からないだらけですいません。。
yuh
投稿日時: 2017/10/23 11:04
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1818
Re: 受注管理画面のCSVダウンロードで商ン情報をだしていて、1注文の情報を横一列で出力したい
インテグレートパートナーの会社様にご依頼ください。


----------------


http://ec-lab.net/

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


 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1567
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
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.