EC-CUBE 顧客データ一括アップロード機能を実装する その2

そして最後に、実装ソースLC_Page_Admin_Customer_Upload.phpを作成します。
作成する箇所は、data/class/pages/admin/customer/
これは、他のアップロードソースをとりあえず持ってきてそれを修正していく戦略を取る。
今回はこれを丸っと持ってきて中身を書き換えます。

data/class/pages/admin/products/LC_Page_Admin_Products_UploadCSV.php

まずは、LC_Page_Admin_Products_UploadCSV.phpをコピーして名前を書き換えるところから始めます。
基本的にはアップロード処理はこれを参考に作り変えていきます。

まずはフィールド変数とinitメソッドを以下のように修正


 function init() {
  parent::init();
  $this->tpl_mainpage = 'customer/upload_csv.tpl';
  $this->tpl_mainno = 'customer';
  $this->tpl_subnavi = 'customer/subnavi.tpl';
  $this->tpl_subno = 'upload';
 }

続いて、$this->lfInitParam();メソッドを修正する。
ここでアップロード項目を定義する。

 /**
  * 入力情報の初期化を行う.
  *
  * @return void
  */
 function lfInitParam() {

  $this->objFormParam->addParam("顧客名", "name01", STEXT_LEN, "KVa", array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK"));
  $this->objFormParam->addParam("顧客名カナ", "kana01", STEXT_LEN, "CKV", array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK"));
  $this->objFormParam->addParam("メールアドレス", "email", STEXT_LEN ,"KVa", array("EMAIL_CHAR_CHECK", "MAX_LENGTH_CHECK"));
  $this->objFormParam->addParam("電話1", "tel01", INT_LEN, "n", array("MAX_LENGTH_CHECK","NUM_CHECK","SPTAB_CHECK"));
  $this->objFormParam->addParam("電話2", "tel02", INT_LEN, "n", array("MAX_LENGTH_CHECK","NUM_CHECK","SPTAB_CHECK"));
  $this->objFormParam->addParam("電話3", "tel03", INT_LEN, "n", array("MAX_LENGTH_CHECK","NUM_CHECK","SPTAB_CHECK"));
  $this->objFormParam->addParam("性別", "sex", INT_LEN, "n", array("MAX_LENGTH_CHECK"));
  $this->objFormParam->addParam("郵便番号1", "zip01", INT_LEN, "n", array("NUM_CHECK","MAX_LENGTH_CHECK"));
  $this->objFormParam->addParam("郵便番号2", "zip02", INT_LEN, "n", array("NUM_CHECK","MAX_LENGTH_CHECK"));
  $this->objFormParam->addParam("住所1", "addr01", STEXT_LEN, "KVa", array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK"));
  $this->objFormParam->addParam("登録日", "create_date", INT_LEN, "n", array("EXIST_CHECK"));

 }

今回の例では上記項目に絞ってアップロードします。
管理者画面ではこんな感じで表示されます。
ec-cube顧客アップロード

必要項目はソースを見ながら随時調整してみてください。

つづいて、顧客テーブル(dtb_customer)へインサートする処理について

新たなメソッドlfRegistCustomerをLC_Page_Admin_Customer_Upload.phpに用意します。


 /**
  * 顧客登録を行う.
  *
  * @param SC_Query $objQuery SC_Queryインスタンス
  * @param string|integer $line 処理中の行数
  * @return void
  */
 function lfRegistCustomer($objQuery,$objDb, $line = "") {

  

  $arrRet = $this->objFormParam->getHashArray();

  // 入力値を入れる
  foreach($arrRet as $key => $val) {
  //emailとsexの場合、変換をかけて、それ以外の項目はそのまま格納する。
   switch($key) {
    case 'email':
     //emailの場合、小文字に変換する
     $sqlval[$key] =strtolower($val);
     break;
    case 'sex':
     if($val=="男性"){
      $sqlval[$key] = '1';
     }else{
      $sqlval[$key] = '2';
     }

    default:
     $sqlval[$key] = $val;
     break;
   }
  }

  //顧客IDの生成(自動採番されるためなし)

  //必要columnを作成する
     //name02とkana02はname01,kana01側に寄せるため、何もセットしない仕様にする。
  //name02
  $sqlval['name02'] = " ";
  //kana02
  $sqlval['kana02'] = " ";

  //secret_key(これはnot null項目なので必要)
  // 重複しない会員登録キーを発行する。
  $count = 1;
  while ($count != 0) {
   $uniqid = SC_Utils_Ex::sfGetUniqRandomId("r");
   $count = $objDb->sfDataExists("dtb_customer", "secret_key = ?", array($uniqid));
   echo "secret_key" . $uniqid . "です";
   
  }
  $sqlval['secret_key'] = $uniqid;

  $sqlval['status'] = '2';

     //それ以外の項目をセット
  $time = date("Y-m-d H:i:s");
  //$sqlval['create_date'] = $sqlval['status'];
  $sqlval['update_date'] = $time;
  $sqlval['del_flg'] = '0';
  $sqlval['mailmaga_flg'] = '1';

  // INSERTの実行
  $objQuery->insert("dtb_customer", $sqlval);

 }

このメソッドでインサートが行われる。

これで必要なメソッドは作成できたので、次はいよいよprocessメソッドの修正です。

このprocessメソッドは~~~で囲った部分を修正すればOKです。

 /**
  * Page のプロセス.
  *
  * @return void
  */
 function process() {
  //---- ページ初期設定
  $objQuery = new SC_Query();
  $objView = new SC_AdminView();
  $objDb = new SC_Helper_DB_Ex();


~~~~~~~~~~~~~~~~~~~~~
      if(!$err) {
       $this->lfRegistCustomer($objQuery,$objDb, $line);
       $regist++;
      }
      $arrParam = $this->objFormParam->getHashArray();

      <font color="#FF0000">if(!$err) echo $line." / ".$rec_count. "行目 (顧客名:".$arrParam['name01']." / メールアドレス:".$arrParam['email'].")";</font>
      flush();
     }
     fclose($fp);

~~~~~~~~~~~~~~~~~~~~~

多少、端折った部分もありますが、
これで顧客アップロード機能は完成です。


blog_banner_upload

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です