そして最後に、実装ソース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"));
}
今回の例では上記項目に絞ってアップロードします。
管理者画面ではこんな感じで表示されます。

必要項目はソースを見ながら随時調整してみてください。
つづいて、顧客テーブル(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);
~~~~~~~~~~~~~~~~~~~~~
多少、端折った部分もありますが、
これで顧客アップロード機能は完成です。
