next-engine用のCSV書き出しプログラム(EC-CUBE2.11)
next-engine用のCSV書き出しで、複数配送に対応させる作業ですが、ちょっと急ぎでやらなきゃならないってことで…。
ベタ書きしてやった(^Д^)
まあ、中身を見る人もいないのでいいかな…と。
Smartyのお勉強をしている暇もないのでしかたなく…。
まあ、どのデータがどの部分に入っているのかを理解するために時間を使ったと思えば…。
時間のある時にでもEC-CUBEのクラスファイルとかSQLとかと組み合わせてもっと簡単にできるようにしようと思います。
プログラマなのに肉体労働。
今回の記事は、上から「その1」「その2」「その3」と順番に見ていけるように「その3」から登録してあります。
とりあえず、処理はこんな感じ。
タイミングは、注文の最終確認のタイミングにするということで、「/html/shopping/confirm.php」に直接記述。
これで、next-engineの店舗設定にある「新楽天市場標準パターン」のデータが作成できます。
==========▼新楽天市場標準パターンCSVデータ▼
"受注番号","レコードナンバー","注文日","注文時間","商品名","商品番号","個数","単価","項目・選択肢","注文者名字","注文者名前","注文者名字フリガナ","注文者名前フリガナ","メールアドレス","注文者郵便番号1","注文者郵便番号2","注文者住所:都道府県","注文者住所:都市区","注文者住所:町以降","注文者電話番号1","注文者電話番号2","注文者電話番号3","注文者性別","注文者誕生日","送付先名字","送付先名前","送付先名字フリガナ","送付先名前フリガナ","送付先郵便番号1","送付先郵便番号2","送付先住所:都道府県","送付先住所:都市区","送付先住所:町以降","送付先電話番号1","送付先電話番号2","送付先電話番号3","のし","決済方法","クレジットカード種類","クレジットカード番号","クレジットカード名義人","クレジットカード有効期限","クレジットカード分割選択","クレジットカード分割備考","配送方法","コメント","ラッピング種類(包装紙)","ラッピング種類(リボン)","ラッピング料金(包装紙)","ラッピング料金(リボン)","ギフトチェック(0:なし/1:あり)","合計","送料(-99999=無効値)","消費税(-99999=無効値)","代引料(-99999=無効値)","請求金額(-99999=無効値)","利用端末","ポイント利用有無","ポイント利用条件","ポイント利用額","ポイントステータス","合計金額(-99999=無効値)","楽天バンク決済手数料","ひとことメモ"
========================================
とりあえず、$_SESSION['csv_data']に保存されるので、あとから
「unserialize( $dat["session"] )→$dat['session']['csv_data']」
で取り出せばおk。
つか、よくよく考えてみたら後々DBからデータとってこなきゃいけないんだから、注文者情報とか共通項目はその時に生成すりゃよかった。
今頃気づいても、書き直す気力が…
今回は「confirm.php」にベタ書きですが
$objPage->arrShipping
$objPage->arrForm
$objPage->arrCartItems
の3つの配列データをSESSIONに登録しておけば、後からいくらでもCSVを生成出来るので
$_SESSION['csv_data'] = serialize( $objPage->arrShipping ) . serialize( $objPage->arrForm ) . serialize( $objPage->arrCartItems );
って感じでDBに登録だけをしておく方がいいかもです。
追記。
$shipping_data[] = ( $shippings["shipping_addr02"] !=="" || $shippings["shipping_addr02"] !==null ) ? $shippings["shipping_addr02"] : $objPage->arrForm["order_addr02"];
この処理は、たまに配列にデータが入ってこないのでそんな時には強制的に購入者のデータを入れるようにしているんですが、よくよく調べてみたら注文完了時にSESSIONの「order_id」をリセットしないと何回も注文を繰り返したときこういう症状がでるとのこと。
data/class/pages/shopping/LC_Page_Shopping_Complete.phpに
赤文字部分を追記していかないといけないみたいです。
ベタ書きしてやった(^Д^)
まあ、中身を見る人もいないのでいいかな…と。
Smartyのお勉強をしている暇もないのでしかたなく…。
まあ、どのデータがどの部分に入っているのかを理解するために時間を使ったと思えば…。
時間のある時にでもEC-CUBEのクラスファイルとかSQLとかと組み合わせてもっと簡単にできるようにしようと思います。
プログラマなのに肉体労働。
今回の記事は、上から「その1」「その2」「その3」と順番に見ていけるように「その3」から登録してあります。
とりあえず、処理はこんな感じ。
タイミングは、注文の最終確認のタイミングにするということで、「/html/shopping/confirm.php」に直接記述。
-----------------------------------------------------------------------
/*--------------------------------------------------------------------------
■■ここから、楽天用のCSVを作成してSESSIONに登録する■■
----------------------------------------------------------------------------*/
//■都道府県コードを定義
$pref = array('1'=>'北海道','2'=>'青森県','3'=>'岩手県','4'=>'宮城県','5'=>'秋田県','6'=>'山形県',
'7'=>'福島県','8'=>'茨城県','9'=>'栃木県','10'=>'群馬県','11'=>'埼玉県','12'=>'千葉県','13'=>'東京都','14'=>'神奈川県',
'15'=>'新潟県','16'=>'富山県','17'=>'石川県','18'=>'福井県',
'19'=>'山梨県','20'=>'長野県','21'=>'岐阜県','22'=>'静岡県',
'23'=>'愛知県','24'=>'三重県','25'=>'滋賀県','26'=>'京都府','27'=>'大阪府','28'=>'兵庫県','29'=>'奈良県','30'=>'和歌山県',
'31'=>'鳥取県','32'=>'島根県','33'=>'岡山県','34'=>'広島県','35'=>'山口県',
'36'=>'徳島県','37'=>'香川県','38'=>'愛媛県','39'=>'高知県',
'40'=>'福岡県','41'=>'佐賀県','42'=>'長崎県','43'=>'熊本県','44'=>'大分県','45'=>'宮崎県','46'=>'鹿児島県','47'=>'沖縄県'
);
//■EC-CUBEでDB登録用に作成した$_SESSIONを配列にする
$order_session = $objPage->arrForm['session'];
$orders = unserialize( $order_session );
//■受注データにダブルクォートを追加する関数(ついでに、文字列にカンマがあったら、ハイフンに変更)
function wquote(&$arr){
foreach($arr as $val){
$val = str_replace(",","-",$val);
$data[] = "\"" . $val . "\"";
}
return ($data);
}
//■受注番号、レコードナンバーは、後から(CSVダウンロード時)データベース操作で生成する
//データ初期化処理
$shipping_data = "";
$payment = "";
$order_date = "";
$order_customer = "";
//★注文日、注文時間の作成
$order_date2 = explode(" ",$objPage->arrForm["create_date"]);
$order_date = implode(",",wquote($order_date2));
//★注文者情報を入れる
$pref_code = $objPage->arrForm["order_pref"];
$order_customer[] = $objPage->arrForm["order_name01"];
$order_customer[] = $objPage->arrForm["order_name02"];
$order_customer[] = $objPage->arrForm["order_kana01"];
$order_customer[] = $objPage->arrForm["order_kana02"];
$order_customer[] = $objPage->arrForm["order_email"];
$order_customer[] = $objPage->arrForm["order_zip01"];
$order_customer[] = $objPage->arrForm["order_zip02"];
$order_customer[] = $pref[$pref_code];
$order_customer[] = $objPage->arrForm["order_addr01"];
$order_customer[] = $objPage->arrForm["order_addr02"];
$order_customer[] = $objPage->arrForm["order_tel01"];
$order_customer[] = $objPage->arrForm["order_tel02"];
$order_customer[] = $objPage->arrForm["order_tel03"];
$order_customer[] = $objPage->arrForm["order_sex"];
$order_customer[] = $objPage->arrForm["order_birth"];
$order_customer = implode(",",wquote($order_customer));
//★受注データを作成する。
//=====================▼====================================単独配送の場合の処理
if ( count($objPage->arrShipping) < 2 ){
//■商品分のループ
foreach($objPage->arrCartItems as $val){
//ループするので、$shipping_dataを初期化
$shipping_data = "";
$payment = "";
$product = "";
//★商品名
$product[] = $val["productsClass"]["name"];
//★商品コード
$product[] = $val["productsClass"]["product_code"];
//★個数
$product[] = $val["quantity"];
//★単価
$product[] = $val["productsClass"]["price02"];
//★項目・選択肢
$product[] = " ";
$product = implode(",",wquote($product));
//★配送先情報
$shipping_data[] = ( $objPage->arrShipping[0]["shipping_name01"] !== "" || $objPage->arrShipping[0]["shipping_name01"] !== Null) ? $objPage->arrShipping[0]["shipping_name01"]:$objPage->arrForm["order_name01"];
$shipping_data[] = ( $objPage->arrShipping[0]["shipping_name02"] !== "" || $objPage->arrShipping[0]["shipping_name02"] !== Null ) ? $objPage->arrShipping[0]["shipping_name02"]:$objPage->arrForm["order_name02"];
$shipping_data[] = ( $objPage->arrShipping[0]["shipping_kana01"] !== "" || $objPage->arrShipping[0]["shipping_kana01"] !== Null ) ? $objPage->arrShipping[0]["shipping_kana01"]:$objPage->arrForm["order_kana01"];
$shipping_data[] = ( $objPage->arrShipping[0]["shipping_kana02"] !== "" || $objPage->arrShipping[0]["shipping_kana02"] !== Null ) ? $objPage->arrShipping[0]["shipping_kana02"]:$objPage->arrForm["order_kana02"];
$shipping_data[] = ( $objPage->arrShipping[0]["shipping_zip01"] !== "" || $objPage->arrShipping[0]["shipping_zip01"] !== Null )?$objPage->arrShipping[0]["shipping_zip01"]:$objPage->arrForm["order_zip01"];
$shipping_data[] = ( $objPage->arrShipping[0]["shipping_zip02"] !== "" ||$objPage->arrShipping[0]["shipping_zip02"] !== Null )?$objPage->arrShipping[0]["shipping_zip02"]:$objPage->arrForm["order_zip02"];
$shipping_pref = ( $objPage->arrShipping[0]["shipping_pref"] !== "" || $objPage->arrShipping[0]["shipping_pref"] !== Null )? $objPage->arrShipping[0]["shipping_pref"]:$objPage->arrForm["order_pref"];
$shipping_data[] = $pref[$shipping_pref];
$shipping_data[] = ( $objPage->arrShipping[0]["shipping_addr01"] !== "" || $objPage->arrShipping[0]["shipping_addr01"] !== Null )? $objPage->arrShipping[0]["shipping_addr01"]:$objPage->arrForm["order_addr01"];
$shipping_data[] = ( $objPage->arrShipping[0]["shipping_addr02"] !== "" || $objPage->arrShipping[0]["shipping_addr02"] !== Null )? $objPage->arrShipping[0]["shipping_addr02"]:$objPage->arrForm["order_addr02"];
$shipping_data[] = ( $objPage->arrShipping[0]["shipping_tel01"] !== "" || $objPage->arrShipping[0]["shipping_tel01"] !== Null )? $objPage->arrShipping[0]["shipping_tel01"]:$objPage->arrForm["order_tel01"];
$shipping_data[] = ( $objPage->arrShipping[0]["shipping_tel02"] !== "" || $objPage->arrShipping[0]["shipping_tel02"] !== Null )? $objPage->arrShipping[0]["shipping_tel02"]:$objPage->arrForm["order_tel02"];
$shipping_data[] = ( $objPage->arrShipping[0]["shipping_tel03"] !== "" || $objPage->arrShipping[0]["shipping_tel03"] !== Null )? $objPage->arrShipping[0]["shipping_tel03"]:$objPage->arrForm["order_tel03"];
$shipping_data[] = " ";
$shipping_data = implode(",",wquote($shipping_data));
//★配送&支払い方法
$payment[] = $objPage->arrForm["payment_method"];
$payment[] = " ";
$payment[] = "(非表示)";
$payment[] = "(非表示)";
$payment[] = "(非表示)";
$payment[] = "0";
$payment[] = " ";
//メール便か通常便か
$deliv = ( $orders["flg"]["normal"] <> 0 ) ? "宅配便" : "メール便";
$payment[] = $deliv;
//★配送日設定
if($objPage->arrShipping[0]["shipping_date"] != "" or $objPage->arrShipping[0]["shipping_date"] != Null){$deliv_date = str_replace("/","-",$objPage->arrShipping[0]["shipping_date"]);}
else {$deliv_date = "指定なし";}
//★配送時間設定
if($objPage->arrShipping[0]["shipping_time"] != "" or $objPage->arrShipping[0]["shipping_time"] != Null){$deliv_time = $objPage->arrShipping[0]["shipping_time"];}
else {$deliv_time = "指定なし";}
$payment[] = "[配送日時指定:]\n" . $deliv_date . "\n" . $deliv_time . "\n" . "\n[備考欄:]\n" . $objPage->arrForm["message"];
//ラッピング関係
$payment[] = " ";
$payment[] = " ";
$payment[] = "0";
$payment[] = "0";
$payment[] = "0";
$payment[] = $objPage->arrForm["subtotal"];
$payment[] = $objPage->arrForm["deliv_fee"];
$payment[] = $objPage->arrForm["tax"];
$payment[] = $objPage->arrForm["charge"];
$payment[] = $objPage->arrForm["total"];
$payment[] = "0";
//★ポイント利用の有無
if ($objPage->arrForm["use_point"] <> 0){
$payment[] = "1";
$payment[] = "1";
$payment[] = $objPage->arrForm["use_point"];
$payment[] = "1";
}
else {
$payment[] = "0";
$payment[] = " ";
$payment[] = " ";
$payment[] = "0";
}
$payment[] = $objPage->arrForm["payment_total"];
$payment[] = "0";
$payment[] = " ";
$payment = implode(",",wquote($payment)) . "\r\n";
//■全データをCSV形式で配列に
$items[] = "," . $order_date . "," . $product . "," . $order_customer . "," . $shipping_data . "," . $payment;
}//foreach(商品分のループ)
}//if
//=====================▲===================================単独配送の場合の処理
//=====================▼====================================複数配送の場合の処理
else{
//配送先分繰り返す
foreach($objPage->arrShipping as $shippings){
//ループするので、$shipping_dataを初期化
$shipping_data = "";
$payment = "";
//★配送先情報
$shipping_data[] = ( $shippings["shipping_name01"] !=="" || $shippings["shipping_name01"] !==Null ) ? $shippings["shipping_name01"] : $objPage->arrForm["order_name01"];
$shipping_data[] = ( $shippings["shipping_name02"] !=="" || $shippings["shipping_name02"] !==Null ) ? $shippings["shipping_name02"] : $objPage->arrForm["order_name02"];
$shipping_data[] = ( $shippings["shipping_kana01"] !=="" || $shippings["shipping_kana01"] !=null ) ? $shippings["shipping_kana01"] : $objPage->arrForm["order_kana01"];
$shipping_data[] = ( $shippings["shipping_kana02"] !=="" || $shippings["shipping_kana02"] !==null ) ? $shippings["shipping_kana02"] : $objPage->arrForm["order_kana02"];
$shipping_data[] = ( $shippings["shipping_zip01"] !=="" || $shippings["shipping_zip01"] !==null ) ? $shippings["shipping_zip01"] : $objPage->arrForm["order_zip01"];
$shipping_data[] = ( $shippings["shipping_zip02"] !=="" || $shippings["shipping_zip01"] !==null ) ? $shippings["shipping_zip02"] : $objPage->arrForm["order_zip02"];
$shipping_pref = ( $shippings["shipping_pref"] !=="" || $shippings["shipping_pref"] !==null) ? $shippings["shipping_pref"] : $objPage->arrForm["order_pref"];
$shipping_data[] = $pref[$shipping_pref];
$shipping_data[] = ( $shippings["shipping_addr01"] !=="" || $shippings["shipping_addr01"] !==null) ? $shippings["shipping_addr01"] : $objPage->arrForm["order_addr01"];
$shipping_data[] = ( $shippings["shipping_addr02"] !=="" || $shippings["shipping_addr02"] !==null ) ? $shippings["shipping_addr02"] : $objPage->arrForm["order_addr02"];
$shipping_data[] = ( $shippings["shipping_tel01"] !=="" || $shippings["shipping_tel01"] !==null) ? $shippings["shipping_tel01"] : $objPage->arrForm["order_tel01"];
$shipping_data[] = ( $shippings["shipping_tel02"] !=="" || $shippings["shipping_tel02"] !==null ) ? $shippings["shipping_tel02"] : $objPage->arrForm["order_tel02"];
$shipping_data[] = ( $shippings["shipping_tel03"] !=="" || $shippings["shipping_tel03"] !==null ) ? $shippings["shipping_tel03"] : $objPage->arrForm["order_tel03"];
$shipping_data[] = " ";
$shipping_data = implode(",",wquote($shipping_data));
//★配送&支払い方法
//★配送&支払い方法
$payment[] = $objPage->arrForm["payment_method"];
$payment[] = " ";
$payment[] = "(非表示)";
$payment[] = "(非表示)";
$payment[] = "(非表示)";
$payment[] = "0";
$payment[] = " ";
//メール便か通常便か
$deliv = ( $orders["flg"]["normal"] <> 0 ) ? "宅配便" : "メール便";
$payment[] = $deliv;
//★配送日設定
if($shippings["shipping_date"] != "" or $shippings["shipping_date"] != Null){$deliv_date = str_replace("/","-",$shippings["shipping_date"]);}
else {$deliv_date = "指定なし";}
//★配送時間設定
if($shippings["shipping_time"] != "" or $shippings["shipping_time"] != Null){$deliv_time = $shippings["shipping_time"];}
else {$deliv_time = "指定なし";}
$payment[] = "[配送日時指定:]\n" . $deliv_date . "\n" . $deliv_time . "\n" . "\n[備考欄:]\n" . $objPage->arrForm["message"];
//ラッピング関係
$payment[] = " ";
$payment[] = " ";
$payment[] = "0";
$payment[] = "0";
$payment[] = "0";
$payment[] = $objPage->arrForm["subtotal"];
$payment[] = $objPage->arrForm["deliv_fee"];
$payment[] = $objPage->arrForm["tax"];
$payment[] = $objPage->arrForm["charge"];
$payment[] = $objPage->arrForm["total"];
$payment[] = "0";
//★ポイント利用の有無
if ($objPage->arrForm["use_point"] <> 0){
$payment[] = "1";
$payment[] = "1";
$payment[] = $objPage->arrForm["use_point"];
$payment[] = "1";
}
else {
$payment[] = "0";
$payment[] = " ";
$payment[] = " ";
$payment[] = "0";
}
$payment[] = $objPage->arrForm["payment_total"];
$payment[] = "0";
$payment[] = " ";
$payment = implode(",",wquote($payment)) . "\r\n";
//■商品分の繰り返し
foreach($shippings["shipment_item"] as $val){
$product = "";
//★商品名
$product[] = $val["productsClass"]["name"];
//★商品コード
$product[] = $val["productsClass"]["product_code"];
//★個数
$product[] = $val["quantity"];
//★単価
$product[] = $val["productsClass"]["price02"];
//★項目・選択肢
$product[] = " ";
$product = implode(",",wquote($product));
//■全データをCSV状態で配列に
$items[] = "," . $order_date . "," . $product . "," . $order_customer . "," . $shipping_data . "," . $payment;
}//foreach(商品分の繰り返し)
}//foreach(配送先分の繰り返し)
}//else
//=====================▲===================================複数配送の場合の処理
/*■ここまでのデータをSESSIONに保存。
取り出す時には unserialize( $dat["session"] ); $dat['session']['csv_data'];でどうぞ。*/
$_SESSION['csv_data'] = $items;
-----------------------------------------------------------------------
これで、next-engineの店舗設定にある「新楽天市場標準パターン」のデータが作成できます。
==========▼新楽天市場標準パターンCSVデータ▼
"受注番号","レコードナンバー","注文日","注文時間","商品名","商品番号","個数","単価","項目・選択肢","注文者名字","注文者名前","注文者名字フリガナ","注文者名前フリガナ","メールアドレス","注文者郵便番号1","注文者郵便番号2","注文者住所:都道府県","注文者住所:都市区","注文者住所:町以降","注文者電話番号1","注文者電話番号2","注文者電話番号3","注文者性別","注文者誕生日","送付先名字","送付先名前","送付先名字フリガナ","送付先名前フリガナ","送付先郵便番号1","送付先郵便番号2","送付先住所:都道府県","送付先住所:都市区","送付先住所:町以降","送付先電話番号1","送付先電話番号2","送付先電話番号3","のし","決済方法","クレジットカード種類","クレジットカード番号","クレジットカード名義人","クレジットカード有効期限","クレジットカード分割選択","クレジットカード分割備考","配送方法","コメント","ラッピング種類(包装紙)","ラッピング種類(リボン)","ラッピング料金(包装紙)","ラッピング料金(リボン)","ギフトチェック(0:なし/1:あり)","合計","送料(-99999=無効値)","消費税(-99999=無効値)","代引料(-99999=無効値)","請求金額(-99999=無効値)","利用端末","ポイント利用有無","ポイント利用条件","ポイント利用額","ポイントステータス","合計金額(-99999=無効値)","楽天バンク決済手数料","ひとことメモ"
========================================
とりあえず、$_SESSION['csv_data']に保存されるので、あとから
「unserialize( $dat["session"] )→$dat['session']['csv_data']」
で取り出せばおk。
つか、よくよく考えてみたら後々DBからデータとってこなきゃいけないんだから、注文者情報とか共通項目はその時に生成すりゃよかった。
今頃気づいても、書き直す気力が…
今回は「confirm.php」にベタ書きですが
$objPage->arrShipping
$objPage->arrForm
$objPage->arrCartItems
の3つの配列データをSESSIONに登録しておけば、後からいくらでもCSVを生成出来るので
$_SESSION['csv_data'] = serialize( $objPage->arrShipping ) . serialize( $objPage->arrForm ) . serialize( $objPage->arrCartItems );
って感じでDBに登録だけをしておく方がいいかもです。
追記。
$shipping_data[] = ( $shippings["shipping_addr02"] !=="" || $shippings["shipping_addr02"] !==null ) ? $shippings["shipping_addr02"] : $objPage->arrForm["order_addr02"];
この処理は、たまに配列にデータが入ってこないのでそんな時には強制的に購入者のデータを入れるようにしているんですが、よくよく調べてみたら注文完了時にSESSIONの「order_id」をリセットしないと何回も注文を繰り返したときこういう症状がでるとのこと。
data/class/pages/shopping/LC_Page_Shopping_Complete.phpに
function action() {
$this->arrInfo = SC_Helper_DB_Ex::sfGetBasisData();
unset($_SESSION["order_id"]);
}
赤文字部分を追記していかないといけないみたいです。