チケット
http://svn.ec-cube.net/open_trac/ticket/2205 にある携帯での非会員購入をやってみました。
私もほしいと思っていたのと、PC、スマホで動作している機能なので、ロジック部分はすでに存在している訳で。
ただし、「注文する」をクリック後、携帯製造番号を要求され、
その後、非会員の購入を選択できるので、ちょっと「?」です。
既存会員の携帯(携帯製造番号登録済み)からは、非会員で購入できません。
data/class/page/shopping/LC_Page_Shopping.php
// お客様情報登録
case 'nonmember_confirm':
$this->tpl_mainpage = $nonmember_mainpage;
$this->tpl_title = $nonmember_title;
$this->lfInitParam($objFormParam);
$objFormParam->setParam($_POST);
// added
if (SC_Display_Ex::detectDevice() === DEVICE_TYPE_MOBILE) {
// 携帯:住所自動入力(お客様)
if (isset($_POST['submit_address_order'])) {
// 入力エラーチェック
$this->arrErr = $this->lfCheckErrorOrder($_POST);
// 入力エラーの場合は終了
if (count($this->arrErr) == 0) {
// 郵便番号検索文作成
$zipcode = $_POST['order_zip01'] . $_POST['order_zip02'];
// 郵便番号検索
$arrAdsList = SC_Utils_Ex::sfGetAddress($zipcode);
// 郵便番号が発見された場合
if (!empty($arrAdsList)) {
$data['order_pref'] = $arrAdsList[0]['state'];
$data['order_addr01'] = $arrAdsList[0]['city']. $arrAdsList[0]['town'];
$objFormParam->setParam($data);
// 該当無し
} else {
$this->arrErr['order_zip01'] = '※該当する住所が見つかりませんでした。<br>';
}
}
break;
}
// 携帯:住所自動入力(お届け先)
if (isset($_POST['submit_address_shipping'])) {
// 入力エラーチェック
$this->arrErr = $this->lfCheckErrorShipping($_POST);
// 入力エラーの場合は終了
if (count($this->arrErr) == 0) {
// 郵便番号検索文作成
$zipcode = $_POST['shipping_zip01'] . $_POST['shipping_zip02'];
// 郵便番号検索
$arrAdsList = SC_Utils_Ex::sfGetAddress($zipcode);
// 郵便番号が発見された場合
if (!empty($arrAdsList)) {
$data['shipping_pref'] = $arrAdsList[0]['state'];
$data['shipping_addr01'] = $arrAdsList[0]['city']. $arrAdsList[0]['town'];
$objFormParam->setParam($data);
// 該当無し
} else {
$this->arrErr['shipping_zip01'] = '※該当する住所が見つかりませんでした。<br>';
}
}
break;
}
}
// added
$this->arrErr = $this->lfCheckError($objFormParam);
if (SC_Utils_Ex::isBlank($this->arrErr)) {
// added
// 携帯:複数のお届け先
if ((SC_Display_Ex::detectDevice() === DEVICE_TYPE_MOBILE) && isset($_POST['several'])) {
$this->lfRegistData($this->tpl_uniqid, $objPurchase, $objCustomer, $objFormParam, true);
$objSiteSess->setRegistFlag();
SC_Response_Ex::sendRedirect(MULTIPLE_URLPATH);
SC_Response_Ex::actionExit();
} else {
// added
$this->lfRegistData($this->tpl_uniqid, $objPurchase, $objCustomer, $objFormParam);
$arrParams = $objFormParam->getHashArray();
$shipping_id = $arrParams['deliv_check'] == '1' ? 1 : 0;
$objPurchase->setShipmentItemTempForSole($objCartSess, $shipping_id);
$objSiteSess->setRegistFlag();
SC_Response_Ex::sendRedirect(SHOPPING_PAYMENT_URLPATH);
SC_Response_Ex::actionExit();
// added
}
// added
}
break;
// added
/**
* 入力エラーのチェック.
*
* @param array $arrRequest リクエスト値($_GET)
* @return array $arrErr エラーメッセージ配列
*/
function lfCheckErrorOrder($arrRequest) {
// パラメーター管理クラス
$objFormParam = new SC_FormParam_Ex();
// パラメーター情報の初期化
$objFormParam->addParam('郵便番号1', 'order_zip01', ZIP01_LEN, 'n', array('EXIST_CHECK', 'NUM_COUNT_CHECK', 'NUM_CHECK'));
$objFormParam->addParam('郵便番号2', 'order_zip02', ZIP02_LEN, 'n', array('EXIST_CHECK', 'NUM_COUNT_CHECK', 'NUM_CHECK'));
// // リクエスト値をセット
$arrData['order_zip01'] = $arrRequest['order_zip01'];
$arrData['order_zip02'] = $arrRequest['order_zip02'];
$objFormParam->setParam($arrData);
// エラーチェック
$arrErr = $objFormParam->checkError();
return $arrErr;
}
function lfCheckErrorShipping($arrRequest) {
// パラメーター管理クラス
$objFormParam = new SC_FormParam_Ex();
// パラメーター情報の初期化
$objFormParam->addParam('郵便番号1', 'shipping_zip01', ZIP01_LEN, 'n', array('EXIST_CHECK', 'NUM_COUNT_CHECK', 'NUM_CHECK'));
$objFormParam->addParam('郵便番号2', 'shipping_zip02', ZIP02_LEN, 'n', array('EXIST_CHECK', 'NUM_COUNT_CHECK', 'NUM_CHECK'));
// // リクエスト値をセット
$arrData['shipping_zip01'] = $arrRequest['shipping_zip01'];
$arrData['shipping_zip02'] = $arrRequest['shipping_zip02'];
$objFormParam->setParam($arrData);
// エラーチェック
$arrErr = $objFormParam->checkError();
return $arrErr;
}
// added
data/Smarty/templates/mobile/shopping/index.tpl
<!--▼会員登録がお済みでないお客様-->
■初めてご注文の方<br>
(新規ご登録)<br>
<form name="member_form" id="member_form" method="post" action="<!--{$smarty.const.ROOT_URLPATH}-->entry/kiyaku.php">
<input type="hidden" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->">
<div align="center"><input type="submit" value="新規登録"></div><br>
</form>
<!--{* added *}-->
(会員登録をせずに購入)<br>
<form name="member_form2" id="member_form2" method="post" action="<!--{$smarty.const.ROOT_URLPATH}-->shopping/index.php">
<input type="hidden" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->">
<input type="hidden" name="mode" value="nonmember" />
<div align="center"><input type="submit" value="会員登録をせずに購入"></div><br>
</form>
<!--{* added *}-->
<!--▲まだ会員登録されていないお客様-->
新規:data/Smarty/templates/mobile/shopping/nonmember_input.tpl
<!--{strip}-->
<form name="form1" id="form1" method="post" action="?">
<input type="hidden" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->">
<input type="hidden" name="mode" value="nonmember_confirm">
<input type="hidden" name="uniqid" value="<!--{$tpl_uniqid}-->" />
<font color="#FF0000">*は必須項目です。</font><br>
<br>
●お名前<font color="#FF0000"> *</font><br>
<font color="#FF0000"><!--{$arrErr.order_name01}--><!--{$arrErr.order_name02}--></font>
姓(例:渋谷)<br>
<input type="text" name="order_name01" value="<!--{$arrForm.order_name01.value|h}-->" maxlength="<!--{$arrForm.order_name01.length}-->" istyle="1"><br>
名(例:花子)<br>
<input type="text" name="order_name02" value="<!--{$arrForm.order_name02.value|h}-->" maxlength="<!--{$arrForm.order_name02.length}-->" istyle="1"><br>
●お名前(フリガナ)<font color="#FF0000"> *</font><br>
<font color="#FF0000"><!--{$arrErr.order_kana01}--><!--{$arrErr.order_kana02}--></font>
フリガナ/姓(例:シブヤ)<br>
<input type="text" name="order_kana01" value="<!--{$arrForm.order_kana01.value|h}-->" maxlength="<!--{$arrForm.order_kana01.length}-->" istyle="2"><br>
フリガナ/名(例:ハナコ)<br>
<input type="text" name="order_kana02" value="<!--{$arrForm.order_kana02.value|h}-->" maxlength="<!--{$arrForm.order_kana02.length}-->" istyle="2"><br>
●性別<font color="#FF0000"> *</font><br>
<font color="#FF0000"><!--{$arrErr.order_sex}--></font>
<input type="radio" name="order_sex" value="1" <!--{if $arrForm.order_sex.value eq 1}-->checked<!--{/if}-->>男性 <input type="radio" name="order_sex" value="2" <!--{if $arrForm.order_sex.value eq 2}-->checked<!--{/if}-->>女性<br>
●職業<br>
<font color="#FF0000"><!--{$arrErr.order_job}--></font>
<select name="job">
<option value="">選択してください</option>
<!--{html_options options=$arrJob selected=$arrForm.order_job.value}-->
</select><br>
●生年月日<br>
<font color="#FF0000"><!--{$arrErr.year}--><!--{$arrErr.month}--><!--{$arrErr.day}--></font>
<input type="text" name="year" value="<!--{$arrForm.year.value|h}-->" size="4" maxlength="4" istyle="4">年<br>
<select name="month">
<!--{html_options options=$arrMonth selected=$arrForm.month.value}-->
</select>月<br>
<select name="day">
<!--{html_options options=$arrDay selected=$arrForm.day.value}-->
</select>日<br>
●郵便番号<font color="#FF0000"> *</font><br>
<font color="#FF0000"><!--{$arrErr[$key1]}--><!--{$arrErr[$key2]}--></font>
<input size="<!--{$arrForm.order_zip01.length+2}-->" type="text" name="order_zip01" value="<!--{if $arrForm.order_zip01.value == ""}--><!--{$arrOtherDeliv.zip01.value|h}--><!--{else}--><!--{$arrForm.order_zip01.value|h}--><!--{/if}-->" maxlength="<!--{$arrForm.order_zip01.length}-->" istyle="4">
-
<input size="<!--{$arrForm.order_zip02.length+2}-->" type="text" name="order_zip02" value="<!--{if $arrForm.order_zip02.value == ""}--><!--{$arrOtherDeliv.zip02.value|h}--><!--{else}--><!--{$arrForm.order_zip02.value|h}--><!--{/if}-->" maxlength="<!--{$arrForm.order_zip02.length}-->" istyle="4"><br>
<input type="submit" name="submit_address_order" value="自動住所入力"><br>
郵便番号を入力後、クリックしてください。<br>
●都道府県<font color="#FF0000"> *</font><br>
<font color="#FF0000"><!--{$arrErr.order_pref}--></font>
<select name="order_pref">
<option value="">都道府県を選択</option>
<!--{html_options options=$arrPref selected=$arrForm.order_pref.value}-->
</select><br>
●住所1<font color="#FF0000"> *</font><br>
<font color="#FF0000"><!--{$arrErr.order_addr01}--></font>
<input type="text" name="order_addr01" value="<!--{$arrForm.order_addr01.value|h}-->" istyle="1"><br>
●住所2<font color="#FF0000"> *</font><br>
<font color="#FF0000"><!--{$arrErr.order_addr02}--></font>
<input type="text" name="order_addr02" value="<!--{$arrForm.order_addr02.value|h}-->" istyle="1"><br>
●電話番号<font color="#FF0000"> *</font><br>
<font color="#FF0000"><!--{$arrErr.order_tel01}--><!--{$arrErr.order_tel02}--><!--{$arrErr.order_tel03}--></font>
<input type="text" size="<!--{$arrForm.order_tel01.length+2}-->" name="order_tel01" value="<!--{$arrForm.order_tel01.value|h}-->" maxlength="<!--{$arrForm.order_tel01.length}-->" istyle="4">
-
<input type="text" size="<!--{$arrForm.order_tel02.length+2}-->" name="order_tel02" value="<!--{$arrForm.order_tel02.value|h}-->" maxlength="<!--{$arrForm.order_tel02.length}-->" istyle="4">
-
<input type="text" size="<!--{$arrForm.order_tel03.length+2}-->" name="order_tel03" value="<!--{$arrForm.order_tel03.value|h}-->" maxlength="<!--{$arrForm.order_tel03.length}-->" istyle="4"><br>
●メールアドレス<font color="#FF0000"> *</font><br>
<font color="#FF0000"><!--{$arrErr.order_email}--></font>
<input type="text" name="order_email" value="<!--{$arrForm.order_email.value|h}-->" istyle="3">
<br>
<font color="#FF0000"><!--{$arrErr.order_email02}--></font>
<input type="text" name="order_email02" value="<!--{$arrForm.order_email02.value|h}-->" istyle="3" />
<br>
<font color="#FF0000">確認のため2度入力してください。</font>
<br>
<hr>
<input type="checkbox" name="deliv_check" value="1" <!--{$arrForm.deliv_check.value|sfGetChecked:1}--> /><font color="#FF0000">お届け先を指定</font><br>
※上記に入力された住所と同一の場合は省略可能です。<br>
○お名前<font color="#FF0000"> *</font><br>
<font color="#FF0000"><!--{$arrErr.shipping_name01}--><!--{$arrErr.shipping_name02}--></font>
姓<br>
<input type="text" name="shipping_name01" value="<!--{$arrForm.shipping_name01.value|h}-->" maxlength="<!--{$arrForm.shipping_name01.length}-->" istyle="1" /><br>
名<br>
<input type="text" name="shipping_name02" value="<!--{$arrForm.shipping_name02.value|h}-->" maxlength="<!--{$arrForm.shipping_name02.length}-->" istyle="1" /><br>
○お名前(フリガナ)<font color="#FF0000"> *</font><br>
<font color="#FF0000"><!--{$arrErr.shipping_kana01}--><!--{$arrErr.shipping_kana02}--></font>
セイ<br>
<input type="text" name="shipping_kana01" value="<!--{$arrForm.shipping_kana01.value|h}-->" maxlength="<!--{$arrForm.shipping_kana01.length}-->" istyle="2" /><br>
メイ<br>
<input type="text" name="$shipping_kana02" value="<!--{$arrForm.shipping_kana02.value|h}-->" maxlength="<!--{$arrForm.shipping_kana02.length}-->" istyle="2" /><br>
○郵便番号<font color="#FF0000"> *</font><br>
<font color="#FF0000"><!--{$arrErr.shipping_zip01}--><!--{$arrErr.shipping_zip02}--></font>
<input size="<!--{$arrForm.shipping_zip01.length+2}-->" type="text" name="shipping_zip01" value="<!--{$arrForm.shipping_zip01.value|h}-->" maxlength="<!--{$arrForm.shipping_zip01.length}-->" istyle="4" />
-
<input size="<!--{$arrForm.shipping_zip02.length+2}-->" type="text" name="shipping_zip02" value="<!--{$arrForm.shipping_zip02.value|h}-->" maxlength="<!--{$arrForm.shipping_zip02.length}-->" istyle="4" /><br>
<input type="submit" name="submit_address_shipping" value="自動住所入力"><br>
郵便番号を入力後、クリックしてください。<br>
○都道府県<font color="#FF0000"> *</font><br>
<font color="#FF0000"><!--{$arrErr.shipping_pref}--></font>
<select name="shipping_pref">
<option value="">都道府県を選択</option>
<!--{html_options options=$arrPref selected=$arrForm.shipping_pref.value}-->
</select><br>
○住所1<font color="#FF0000"> *</font><br>
<font color="#FF0000"><!--{$arrErr.shipping_addr01}--></font>
<input type="text" name="shipping_addr01" value="<!--{$arrForm.shipping_addr01.value|h}-->" maxlength="<!--{$arrForm.shipping_addr01.length}-->" istyle="1" /><br />
○住所2<font color="#FF0000"> *</font><br>
<font color="#FF0000"><!--{$arrErr.shipping_addr02}--></font>
<input type="text" name="shipping_addr02" value="<!--{$arrForm.shipping_addr02.value|h}-->" maxlength="<!--{$arrForm.shipping_addr02.length}-->" istyle="1" /><br />
○電話番号<font color="#FF0000"> *</font><br>
<font color="#FF0000"><!--{$arrErr.shipping_tel01}--><!--{$arrErr.shipping_tel02}--><!--{$arrErr.shipping_tel03}--></font>
<input type="text" size="<!--{$arrForm.shipping_tel01.length+2}-->" name="shipping_tel01" value="<!--{$arrForm.shipping_tel01.value|h}-->" maxlength="<!--{$arrForm.shipping_tel01.length}-->" istyle="4" />
-
<input type="text" size="<!--{$arrForm.shipping_tel02.length+2}-->" name="shipping_tel02" value="<!--{$arrForm.shipping_tel02.value|h}-->" maxlength="<!--{$arrForm.shipping_tel02.length}-->" istyle="4" />
-
<input type="text" size="<!--{$arrForm.shipping_tel03.length+2}-->" name="shipping_tel03" value="<!--{$arrForm.shipping_tel03.value|h}-->" maxlength="<!--{$arrForm.shipping_tel03.length}-->" istyle="4" /><br>
<!--{if $smarty.const.USE_MULTIPLE_SHIPPING !== false}-->
<div align="left"><input type="submit" name="singular" id="singular" value="上記のお届け先のみに送る"></div>
<div align="right"><input type="submit" name="several" id="several" value="複数のお届け先に送る"></div>
<!--{else}-->
<div align="center"><input type="submit" name="singular" id="singular" value="次へ"></div>
<!--{/if}-->
</form>
<!--{/strip}-->