質問 > フロント機能 > 行き詰まりました・・・。フォームについてです。 |
フロント機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
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; } ありがとうございました。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |