質問 > フロント機能 > 受注管理画面の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の分の注文を横一列に ということです。 どちらかというと後者が理想で、これは4224の注文の二商品目以降の情報には受注番号がありません。 実装方法として、 SC_Helper_CSV.phpのcbOutputCSVの
辺りをカスタマイズすればいい気はするのですが、分かりません。 fputcsvもEC-CUBEで作られたメソッドでは無いですし、、 分かる方いらっしゃいましたら、どうかご教示ください。 |
yuh |
投稿日時: 2017/10/20 17:07
対応状況: −−−
|
神 登録日: 2013/1/9 居住地: 大阪 投稿: 1819 |
Re: 受注管理画面のCSVダウンロードで商ン情報をだしていて、1注文の情報を横一列で出力したい
多分こんな感じで、CSV出力周りを変更してあげればできるはず。
|
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 居住地: 大阪 投稿: 1819 |
Re: 受注管理画面のCSVダウンロードで商ン情報をだしていて、1注文の情報を横一列で出力したい CSV出力周りで自動的に"で囲むように処理が入ってるので、その処理を使用せずに別途CSVを出力する部分を作ればできるかと。
|
tsurtua |
投稿日時: 2017/10/20 17:45
対応状況: −−−
|
常連 登録日: 2017/3/31 居住地: 投稿: 57 |
Re: 受注管理画面のCSVダウンロードで商ン情報をだしていて、1注文の情報を横一列で出力したい 確かに
サクラエディタで開くと 各列の最初と最後に"がありました。 今までは"が無かったのになぜ今回急に現れたのでしょう? |
yuh |
投稿日時: 2017/10/20 17:59
対応状況: −−−
|
神 登録日: 2013/1/9 居住地: 大阪 投稿: 1819 |
Re: 受注管理画面のCSVダウンロードで商ン情報をだしていて、1注文の情報を横一列で出力したい データの内部に','が入ってるからです。
出力するCSVのカラムが可変の為、すべてSQL上で組み立てるやり方で提示しているので、それに応じたCSVの出力をする必要があります。
|
tsurtua |
投稿日時: 2017/10/23 9:27
対応状況: −−−
|
常連 登録日: 2017/3/31 居住地: 投稿: 57 |
Re: 受注管理画面のCSVダウンロードで商ン情報をだしていて、1注文の情報を横一列で出力したい なるほど、ここに来て意外と難しそうになってきましたね。。
CSV出力周りで自動的に"で囲むように処理しているところはどこでしょうか?見つけきれませんでした。 また、”それに応じたCSVの出力する”とはどのようにしたらよいのでしょうか? 分からないだらけですいません。。 |
yuh |
投稿日時: 2017/10/23 11:04
対応状況: −−−
|
神 登録日: 2013/1/9 居住地: 大阪 投稿: 1819 |
Re: 受注管理画面のCSVダウンロードで商ン情報をだしていて、1注文の情報を横一列で出力したい インテグレートパートナーの会社様にご依頼ください。
|
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |