app/Plugin/PiaReservation/Resource/template/default/index.twig line 1

Open in your IDE?
  1. {% extends 'default_frame.twig' %}
  2. {% block main %}
  3. <link rel="stylesheet" href="/common/css/jquery-ui.css">
  4. <script src="/common/js/jquery-ui-1.13.0.js"></script>
  5. <script src="/common/js/jquery.ui.datepicker-ja.min.js"></script>
  6. <script>
  7. var dateFormat = 'yy/mm/dd';
  8. // 選択不可日付を登録(※最終行に「,」を入れない)
  9. // 0を頭に付けて2桁にしてください。例.2020/01/03
  10. var disableDates = [
  11.   {{ holiday|raw }}
  12. ];
  13. // 六曜データをJavaScriptに渡す
  14. var htRoku = {{ htRoku|json_encode|raw }};
  15. $(function() {
  16.   // 日付フィールドの直接入力を禁止
  17.   $("#pia_reservation_hope_date01").keypress(function(e) {
  18.     $(this).val("");
  19.     alert("直接入力ではなくカレンダーから選択してください。");
  20.     return false;
  21.   });
  22.   $("#pia_reservation_hope_date02").keypress(function(e) {
  23.     $(this).val("");
  24.     alert("直接入力ではなくカレンダーから選択してください。");
  25.     return false;
  26.   });
  27.   $("#pia_reservation_hope_date03").keypress(function(e) {
  28.     $(this).val("");
  29.     alert("直接入力ではなくカレンダーから選択してください。");
  30.     return false;
  31.   });
  32.   $.datepicker.setDefaults($.datepicker.regional["ja"]);
  33.   $("#open_date").datepicker({
  34.     minDate: "+1d",
  35.     maxDate: "+4m",
  36.     numberOfMonths: 4,
  37.     showButtonPanel: false,
  38.     beforeShowDay: function(date) {
  39.       if (date.getDay() === 0) {
  40.         return [false, 'ui-state-disabled', "非営業日"];
  41.       } else {
  42.         var year = date.getFullYear();
  43.         var month = date.getMonth();
  44.         var day = date.getDate();
  45.         var disableDate = year + "/" + ('00' + (month + 1)).slice(-2) + "/" + ('00' + day).slice(-2);
  46.         var isAvailable = (disableDates.indexOf(disableDate) === -1);
  47.         
  48.         // 六曜の取得
  49.         var dateStr = year + "-" + ('00' + (month + 1)).slice(-2) + "-" + ('00' + day).slice(-2);
  50.         var rokuyou = htRoku[dateStr] || "";
  51.         
  52.         return [isAvailable, "", rokuyou];
  53.       }
  54.     },
  55.     onSelect: function(dateText, inst) {
  56.       // 日付をHTML5のdate形式に変換
  57.       var dateParts = dateText.split('/');
  58.       var formattedDate = dateParts[0] + '-' + dateParts[1].padStart(2, '0') + '-' + dateParts[2].padStart(2, '0');
  59.       
  60.       // 4ヶ月カレンダーから選択した場合は第1希望日に設定
  61.       $("#pia_reservation_hope_date01").val(formattedDate);
  62.       $("#pia_reservation_hope_date01").focus();
  63.     }
  64.   });
  65.   $.datepicker.setDefaults({
  66.     minDate: "+1d",
  67.     maxDate: "+3m",
  68.     numberOfMonths: 1,
  69.     beforeShowDay: function(date) {
  70.       if (date.getDay() === 0) {
  71.         return [false, 'ui-state-disabled', "非営業日"];
  72.       } else {
  73.         var year = date.getFullYear();
  74.         var month = date.getMonth();
  75.         var day = date.getDate();
  76.         var disableDate = year + "/" + ('00' + (month + 1)).slice(-2) + "/" + ('00' + day).slice(-2);
  77.         return [(disableDates.indexOf(disableDate) === -1), "", "営業日"];
  78.       }
  79.     }
  80.   });
  81.   // 個別のdatepickerは、フォーカスされたフィールドにのみ適用
  82.   $("#pia_reservation_hope_date01").datepicker({
  83.     onSelect: function(dateText, inst) {
  84.       // 日付をHTML5のdate形式に変換
  85.       var dateParts = dateText.split('/');
  86.       var formattedDate = dateParts[0] + '-' + dateParts[1].padStart(2, '0') + '-' + dateParts[2].padStart(2, '0');
  87.       $(this).val(formattedDate);
  88.       $("#pia_reservation_hope_time01").focus();
  89.     }
  90.   });
  91.   $("#pia_reservation_hope_date02").datepicker({
  92.     onSelect: function(dateText, inst) {
  93.       // 日付をHTML5のdate形式に変換
  94.       var dateParts = dateText.split('/');
  95.       var formattedDate = dateParts[0] + '-' + dateParts[1].padStart(2, '0') + '-' + dateParts[2].padStart(2, '0');
  96.       $(this).val(formattedDate);
  97.       $("#pia_reservation_hope_time02").focus();
  98.     }
  99.   });
  100.   $("#pia_reservation_hope_date03").datepicker({
  101.     onSelect: function(dateText, inst) {
  102.       // 日付をHTML5のdate形式に変換
  103.       var dateParts = dateText.split('/');
  104.       var formattedDate = dateParts[0] + '-' + dateParts[1].padStart(2, '0') + '-' + dateParts[2].padStart(2, '0');
  105.       $(this).val(formattedDate);
  106.       $("#pia_reservation_hope_time03").focus();
  107.     }
  108.   });
  109. });
  110. function changeDateFormat(date) {
  111.   let year = date.getFullYear();
  112.   let month = ('00' + date.getMonth()).slice(-2);
  113.   let day = ('00' + date.getDate()).slice(-2);
  114.   let f_date = year + "/" + month + "/" + day;
  115.   return f_date;
  116. }
  117. function doConfirm() {
  118.   var hope_date01 = $("#pia_reservation_hope_date01").val();
  119.   if (!hope_date01) {
  120.     alert("第1希望日を選択してください。");
  121.     $("#pia_reservation_hope_date01").focus();
  122.     return;
  123.   }
  124.   $("#open_date").hide();
  125.   $("#fm").submit();
  126. }
  127. $(function() {
  128.   dispCalendar();
  129. });
  130. $(window).resize(function() {
  131.   dispCalendar();
  132. });
  133. function dispCalendar() {
  134.   var w = $(window).width();
  135.   var x = 640;
  136.   if (w <= x) {
  137.     $("#open_date").hide();
  138.     $("#calenderform button").show();
  139.   } else {
  140.     $("#open_date").show();
  141.     $("#calenderform button").hide();
  142.   }
  143. }
  144. function doSelect(id) {
  145.   $(id).focus();
  146. }
  147. $(function() {
  148.   doNext("#pia_reservation_reservation_name", "#pia_reservation_reservation_tel");
  149.   doNext("#pia_reservation_reservation_tel", "#pia_reservation_reservation_email");
  150.   doNext("#pia_reservation_reservation_email", "#pia_reservation_visitor");
  151.   doNext("#pia_reservation_visitor", "#pia_reservation_visitor_detail");
  152. });
  153. function doNext(s_id, n_id) {
  154.   $(s_id).keypress(function(e) {
  155.     if (e.which == 13) {
  156.       $(n_id).focus();
  157.       $(s_id).blur();
  158.       return false;
  159.     }
  160.   });
  161. }
  162. </script>
  163. <style type="text/css">
  164. #calenderform button {
  165.   display: none;
  166. }
  167. .ui-datepicker-today {
  168.   opacity: 1 !important;
  169. }
  170. .ui-datepicker-today span {
  171.   color: red !important;
  172.   border: 1px solid red !important;
  173. }
  174. .ui-datepicker-multi-4 .ui-datepicker-group {
  175.   width: 25% !important;
  176. }
  177. #open_date {
  178.   width: fit-content;
  179.   margin: auto !important;
  180. }
  181. #error_msg {
  182.   width: 80%;
  183.   margin: 20px auto;
  184.   background-color: #fffce5;
  185.   padding: 10px;
  186. }
  187. #error_msg p {
  188.   margin: 0;
  189. }
  190. </style>
  191. <div class="ec-registerRole">
  192.   <div class="kaso_h1title">
  193.     <p>Appointment</p>
  194.     <h1>来店予約</h1>
  195.   </div>
  196. <div class="ec-off1Grid">
  197.   <div class="ec-off1Grid__cell">
  198.     <form id="fm" name="fm" method="post" action="{{ url('plugin_pia_reservation_confirm') }}">
  199.       {{ form_widget(form._token) }}
  200.       <div id="open_date"></div>
  201.       
  202.       <div id="calenderform">
  203.         <div class="ec-borderedDefs">
  204.           <p id="attention_area" style="text-align: left;">
  205.             第1希望日を最優先とさせて頂きますが、先約を頂いている場合、お時間の調整または第2、第3希望日で承る場合がございますのでご了承下さい。<br>
  206.             ご予約お申込は、確定ではございません。のちほど担当者よりメールまたは、お電話にて改めてご連絡申し上げます。<br>
  207.             <span style="color:red;">※</span> は必要項目になります。ご入力お願い致します。
  208.           </p>
  209.           {% if error_msg %}
  210.           <div id="error_msg">
  211.             {% for msg in error_msg %}
  212.               <p><span style="color:red;">※</span>{{ msg }}</p>
  213.             {% endfor %}
  214.           </div>
  215.           {% endif %}
  216.           <div id="calen_table" class="open_date_val">
  217.             <dl>
  218.               <dt>第1希望日 <span style="color:red;">※</span></dt>
  219.               <dd>
  220.                 <span>日程:</span>
  221.                 {{ form_widget(form.hope_date01, {'attr': {'id': 'hope_date01', 'autocomplete': 'off'}}) }}
  222.                 {{ form_errors(form.hope_date01) }}
  223.                 <span> <br></span>
  224.                 時間:
  225.                 {{ form_widget(form.hope_time01, {'attr': {'id': 'hope_time01', 'onchange': 'doSelect("#pia_reservation_hope_date02");'}}) }}
  226.                 {{ form_errors(form.hope_time01) }}
  227.               </dd>
  228.             </dl>
  229.             <dl>
  230.               <dt>第2希望日</dt>
  231.               <dd>
  232.                 <span>日程:</span>
  233.                 {{ form_widget(form.hope_date02, {'attr': {'id': 'hope_date02', 'autocomplete': 'off'}}) }}
  234.                 {{ form_errors(form.hope_date02) }}
  235.                 <span> <br></span>
  236.                 時間:
  237.                 {{ form_widget(form.hope_time02, {'attr': {'id': 'hope_time02', 'onchange': 'doSelect("#pia_reservation_hope_date03");'}}) }}
  238.                 {{ form_errors(form.hope_time02) }}
  239.               </dd>
  240.             </dl>
  241.             <dl>
  242.               <dt>第3希望日</dt>
  243.               <dd>
  244.                 <span>日程:</span>
  245.                 {{ form_widget(form.hope_date03, {'attr': {'id': 'hope_date03', 'autocomplete': 'off'}}) }}
  246.                 {{ form_errors(form.hope_date03) }}
  247.                 <span> <br></span>
  248.                 時間:
  249.                 {{ form_widget(form.hope_time03, {'attr': {'id': 'hope_time03', 'onchange': 'doSelect("#pia_reservation_reservation_name");'}}) }}
  250.                 {{ form_errors(form.hope_time03) }}
  251.               </dd>
  252.             </dl>
  253.             <dl>
  254.               <dt>お名前 <span style="color:red;">※</span></dt>
  255.               <dd class="w90">
  256.                 {{ form_widget(form.reservation_name, {'attr': {'id': 'reservation_name'}}) }}
  257.                 {{ form_errors(form.reservation_name) }}
  258.               </dd>
  259.             </dl>
  260.             <dl>
  261.               <dt>電話番号 <span style="color:red;">※</span></dt>
  262.               <dd class="w90">
  263.                 {{ form_widget(form.reservation_tel, {'attr': {'id': 'reservation_tel'}}) }}
  264.                 {{ form_errors(form.reservation_tel) }}
  265.               </dd>
  266.             </dl>
  267.             <dl>
  268.               <dt>メールアドレス <span style="color:red;">※</span></dt>
  269.               <dd class="w90">
  270.                 {{ form_widget(form.reservation_email, {'attr': {'id': 'reservation_email'}}) }}
  271.                 {{ form_errors(form.reservation_email) }}
  272.               </dd>
  273.             </dl>
  274.             <dl>
  275.               <dt>来店人数</dt>
  276.               <dd>
  277.                 {{ form_widget(form.visitor, {'attr': {'id': 'visitor'}}) }}
  278.                 {{ form_errors(form.visitor) }}
  279.               </dd>
  280.             </dl>
  281.             <dl>
  282.               <dt>詳細</dt>
  283.               <dd class="w90">
  284.                 {{ form_widget(form.visitor_detail, {'attr': {'id': 'visitor_detail', 'rows': 5, 'maxlength': 2000, 'placeholder': '年齢、友人と一緒に来店予定、など'}}) }}
  285.                 {{ form_errors(form.visitor_detail) }}
  286.               </dd>
  287.             </dl>
  288.             <dl>
  289.               <dt>ご質問など</dt>
  290.               <dd>
  291.                 {{ form_widget(form.message, {'attr': {'id': 'message', 'rows': 5, 'maxlength': 2000}}) }}
  292.                 {{ form_errors(form.message) }}
  293.               </dd>
  294.             </dl>
  295.           </div>
  296.           <div id="yoyaku">
  297.             <input type="button" value="予約内容を確認する" id="yoyakubtn" onclick="doConfirm();">
  298.           </div>
  299.         </div>
  300.       </div>
  301.     </form>
  302.   </div>
  303. </div>
  304. </div>
  305. {% endblock %}