バージョン選択

フォーラム

メニュー

オンライン状況

64 人のユーザが現在オンラインです。 (49 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 64
もっと...

サイト内検索

質問 > フロント機能 > 行き詰まりました・・・。フォームについてです。

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
wa.shi
投稿日時: 2018/2/20 12:35
対応状況: 解決済
常連
登録日: 2018/2/20
居住地:
投稿: 45
行き詰まりました・・・。フォームについてです。
「ご注文の流れ」フォーム
「お届け先」や「お届け日時」の選択ページに関しまして、
現在項目追加などのカスタマイズを行っております。

今回、「お届け方法」という
ラジオボタン項目の選択肢によって、
他のチェックボックス箇所や他のテキストエリア箇所など
操作有無の分岐を追加しております。

そこで、1点どうしてもうまくいかない箇所があり、
原因不明で頭が破裂しそうな勢いです…。

「お届け方法」の選択肢は2つあり、
その選択によりお届け時間のプルダウンの値が変動する仕様です。
ここで行き詰まっております…。
上記の変動は上手くいくのですが、
次のページへ進むに辺り、
「お届け時間が選択されていません。」というエラーが出てしまい、
進むことができません。

ここでは2つの選択肢「A」か「B」と致します。

「A」の場合、デフォルト値(9:30、10:00など)
「B」の場合、新たな値(午前中、14-16時など)

下記のようにjavaを用いてロジックを組みました。
先ずは「payment.tpl」です。


<script>
function rule_checked() {
$("[name='rule_id']").click(function(){
var num = $(":checked").val();
if ( num != 2){
$('select[title="Btimes"]').css("display" , "none");
$('select[title="times"]').css("display" , "none");
$('select[title="Atimes"]').css("display" , "");
} else {
$('select[title="Atimes"]').css("display" , "none");
$('select[title="Btimes"]').css("display" , "");
$('select[title="times"]').css("display" , "none");
}
});
};
</script>


<div class="deliv_rule">
<!--{assign var=key value="rule_id"}-->
<table summary="お届け方法選択" id="rule">
<col width="30%" />
<col width="15%" />
<col width="55%" />
<tr>
<th rowspan="5" class="alignC">
<p>お届け方法を</p>
<p>ご選択ください。</p></th>
<th class="alignC">選択</th>
<th>お届け方法</th>
</tr>
<!--{section name=cnt loop=$arrDelivRule start=1}-->
<tr>
<td rowspan="2" class="alignC">
<input type="radio" id="rule_<!--{$arrDelivRule[cnt].rule_id}-->" name="<!--{$key}-->" onclick="rule_checked();" value="<!--{$arrDelivRule[cnt].rule_id}-->" style="<!--{$arrErr[$key]|sfGetErrorColor}-->" <!--{$arrDelivRule[cnt].rule_id|sfGetChecked:$arrForm[$key].value}--> />
</td>
<td>
<label for="rule_<!--{$arrDelivRule[cnt].rule_id}-->">
<!--{$arrDelivRuleCmt[cnt]|h}-->
</label>
</td>
</tr>

<tr>
<td style="font-weight: bold;">
<label for="rule_<!--{$arrDelivRule[cnt].rule_id}-->">
<!--{$arrDelivRule[cnt].rule_name|h}-->
</label>
</td>
</tr>
<!--{/section}-->
</table>

</div>
<tr>
<th class="alignC">お届け時間</th>
<td>
<!--{if $arrForm.rule_id.value != 2 }-->
<select id="deliv_time" name="deliv_time" title="times" >
<option value="">----</option>
<!--{foreach name=loop from=$SendTimes item=item key=key}-->
<!--{if $item == $arrForm.deliv_time }-->
<option value="<!--{$item|h}-->" selected="selected"><!--{$item|h}--></option>
<!--{else}-->
<option value="<!--{$item|h}-->" ><!--{$item|h}--></option>
<!--{/if}-->
<!--{/foreach}-->
</select>
<!--{else}-->
<select id="deliv_time" name="deliv_time" title="times" >
<option value="">----</option>
<!--{foreach name=loop from=$BTimes item=item key=key}-->
<!--{if $item == $arrForm.deliv_time }-->
<option value="<!--{$item|h}-->" selected="selected"><!--{$item|h}--></option>
<!--{else}-->
<option value="<!--{$item|h}-->" ><!--{$item|h}--></option>
<!--{/if}-->
<!--{/foreach}-->
</select>
<!--{/if}-->

<select id="deliv_time" name="deliv_time" title="Atimes" style="display:none">
<option value="">----</option>
<!--{foreach name=loop from=$SendTimes item=item key=key}-->
<!--{if $item == $arrForm.deliv_time }-->
<option value="<!--{$item|h}-->" selected="selected"><!--{$item|h}--></option>
<!--{else}-->
<option value="<!--{$item|h}-->" ><!--{$item|h}--></option>
<!--{/if}-->
<!--{/foreach}-->
</select>
<select id="deliv_time" name="deliv_time" title="Btimes" style="display:none">
<option value="">----</option>
<!--{foreach name=loop from=$BTimes item=item key=key}-->
<!--{if $item == $arrForm.deliv_time }-->
<option value="<!--{$item|h}-->" selected="selected"><!--{$item|h}--></option>
<!--{else}-->
<option value="<!--{$item|h}-->" ><!--{$item|h}--></option>
<!--{/if}-->
<!--{/foreach}-->
</select>
</td>
</tr>

※「times」はお届け方法の初期値、またはページ遷移用(戻るやエラーになった時の為のもの)です。

続いて
「LC_Page_Shopping_Payment_Ex.php」の変更および追加箇所は以下の通りです。



function init(){
parent::init();
$this->tpl_onload = 'fnCheckInputPoint();';
$this->tpl_title = 'お支払方法・お届け時間等の指定';
$masterData = new SC_DB_MasterData_Ex();
$this->arrPref = $masterData->getMasterData('mtb_pref');
$this->arrDelivRule = SC_Helper_DB_Ex::sfGetRuleIDValueList('dtb_deliv_rule', 'rule_id', 'rule_name');
$this->arrDelivRule = array();

$this->arrDelivRule[] = array(rule_name => '未指定',
rule_id => 0);
$this->arrDelivRule[] = array(rule_name => 'お届け方法A',
rule_id => 1);
$this->arrDelivRule[] = array(rule_name => 'お届け方法B',
rule_id => 2);

$this->arrDelivRuleCmt = array(
1=>'お届け方法Aはこちらを',
2=>'お届け方法Bはこちらを'
);

}

<中略>

case 'confirm':
// パラメーター情報の初期化
$this->setFormParams($objFormParam, $_POST, false, $this->arrShipping);

//$deliv_id = $objFormParam->getValue('deliv_id');
$deliv_id = 3;
$arrSelectedDeliv = $this->getSelectedDeliv($objPurchase, $objCartSess, $deliv_id);
$this->arrPayment = $arrSelectedDeliv['arrPayment'];
$this->arrDelivTime = $arrSelectedDeliv['arrDelivTime'];
$this->img_show = $arrSelectedDeliv['img_show'];

$this->arrErr = $this->lfCheckError($objFormParam, $this->arrPrices['subtotal'], $this->tpl_user_point);

if( $this->tpl_login == '0'){
$arrForm = $objFormParam->getHashArray();
if($arrForm['rule_id'] == "" || $arrForm['rule_id'] == "0"){
$this->arrErr['deli'] .= "お届け方法が未選択です。<br>";
}

if($arrForm['deliv_time'] == ""){
$this->arrErr['deli'] .= "配達時間が未指定です。<br>";
}
}

<中略>

$times = array(
'9:00',
'9:30',
'10:00',
'10:30',
'11:00',
'11:30',
'12:00',
'12:30',
'13:00',
'13:30',
'14:00',
);

foreach($times as $value){
$this->SendTimes[] = $value;
}

$btimes = array(
'午前中',
'14-16時',
'16-18時',
'18-20時',
'19-21時',
);

foreach($btimes as $timval){
$this->BTimes[] = $timval;

<中略>

function lfInitParam(&$objFormParam, $deliv_only, &$arrShipping) {
$objFormParam->addParam('お届け方法', 'rule_id', INT_LEN, 'n', array('MAX_LENGTH_CHECK'));
$objFormParam->addParam('配送時間', 'deliv_time', STEXT_LEN, 'KVa', array( 'SPTAB_CHECK', 'MAX_LENGTH_CHECK'));
}


当質問に関係ない箇所は省いております。
変数名は仮名を用いております。

上記、ロジック
パッと見で怪しい箇所がございましたら、
ご指摘頂けますと幸いでございます。

以上、よろしくお願いいたします。
shinra
投稿日時: 2018/2/21 18:13
対応状況: −−−
一人前
登録日: 2017/9/2
居住地:
投稿: 124
Re: 行き詰まりました・・・。フォームについてです。
「お届け時間が選択されていません。」とのエラー表示が示す通りdeliv_timeの値が想定通りに送信されていないのが原因では無いでしょうか。
複数あるdeliv_timeのselectフォームを一つに統一し、JavaScriptでoptionの部分だけを適切に書き換えるようにした方が良いと思います。
wa.shi
投稿日時: 2018/2/22 10:32
対応状況: 解決済
常連
登録日: 2018/2/20
居住地:
投稿: 45
Re: 行き詰まりました・・・。フォームについてです。
ご回答ありがとうございます。

shinra様の仰る通り、
統一感が欠けていることが原因と判明致しました。

LC_Shopping_Payment_Ex.phpの配列箇所を
下記のように修正して、
独自の変数、$btimes、$timvalを廃止し、
デフォルトのtime値と統一させたら、
想定通りの結果となりました。

$times = array(
'9:00',
'9:30',
'10:00',
'10:30',
'11:00',
'11:30',
'12:00',
'12:30',
'13:00',
'13:30',
'14:00',
);

foreach($times as $value){
$this->SendTimes[] = $value;
}

}

$this->BTimes = array();

$times = array(
'午前中',
'14-16時',
'16-18時',
'18-20時',
'19-21時',
);

foreach($times as $value){
$this->BTimes[] = $value;

}

ありがとうございました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,856名です
総投稿数は109,989件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1291
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.