MyASP(マイスピー)の登録フォームでカレンダーの日付入力を使う方法
マイスピーの設定をしていると、すごくかゆいところまで手が届くんだけど、もうちょっとこっちも…と思うことが時々あります。
その一つが、登録フォームでカレンダー入力が使えないことです。
日付入力ってカレンダーで入力できたらすごく直感的で操作しやすいので、お申し込みフォームでセミナーの日付とかを選択させるのにカレンダーでできたら嬉しいですよね?
そこで今回は、ちょっと設定にコピペするだけで、登録フォームでカレンダー日付入力ができるようにする方法をご紹介します。
1.事前準備
1-1.マイスピーの登録フォームデザインを開く
カレンダー日付入力の仕組みを導入したいシナリオのシナリオ管理メニューから登録フォームデザインを開きます。
1-2.「カスタムフッター」をクリックして開く
登録フォームデザイン設定画面の下の方にある「カスタムフッター」をクリックして、カスタムフッターの入力フォームを表示させます。
1-3.次のコードを貼り付けて保存する
カレンダー入力システムのコードが下のコードになります。
これをまずは全部選択してコピーしてください。
(カレンダーの仕組みにはflatpickrというものを使っています。本体はcdnっていう公開されているところから持ってくるのでマイスピーにも負担がかかりません。)
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css">
<script src="https://npmcdn.com/flatpickr/dist/flatpickr.min.js"></script>
<script src="https://npmcdn.com/flatpickr/dist/l10n/ja.js"></script>
<script>
$(function(){
// イベントウェビナーの入力フォームからデータを取得します。
var days = $('#UserEventDatetime').find('option');
var daytime_list = [];
var day_list = [];
for(var i=0;i<days.length;i++){
// 各データの日付と時間を分離して保持します
var event_array = days[i].value.split(' ');
var event_date = event_array[0];
var event_time = event_array[1];
if( !Array.isArray(daytime_list[event_date]) ){
daytime_list[event_date] = [];
day_list.push(event_date);
}
daytime_list[event_date].push(event_time);
}
// イベントウェビナーの書式をリセットします
var event_init_day = $('#UserEventDatetime').val();
$('#UserEventDatetime').replaceWith('<input type="hidden" name="data[User][event_datetime]" id="UserEventDatetime" value="' + event_init_day + '">');
$('#UserEventDatetime').after('<input name="js_event_datetime" id="JsEventDatetime" class="payment_method_select" style="width:12em;"> <select name="js_event_time" class="payment_method_select" id="JsEventTime"></select>');
// カレンダーの割当
flatpickr('#JsEventDatetime', {
locale : "ja", // 日本語用モジュールを適用
dateFormat : 'Y/m/d(D)', // 2022/01/23(月)の形式で表示
defaultDate : new Date(), // 入力エリアの初期値
enable : day_list,
minDate : day_list[0],
maxDate : day_list[day_list.length-1],
defaultDate : day_list[0],
onChange : (selectedDates, dateStr, instance) => selectTimeChangeByDate(selectedDates[0]),
onClose : (selectedDates, dateStr, instance) => selectTimeChangeByDate(selectedDates[0]),
onReady : (selectedDates, dateStr, instance) => selectTimeChangeByDate(selectedDates[0])
});
function selectTimeChangeByDate(selectedDate){
if(!selectedDate){
return;
}
const time=$('#JsEventTime');
if(!time){
return;
}
time.empty(); // 中身を空にしてから
// 該当日のデータを追加
const selectDay = formatDate(selectedDate);
if( selectDay in daytime_list ){
addTimeList(daytime_list[selectDay]);
}
$('#UserEventDatetime').val(selectDay + ' ' + $('#JsEventTime').val());
}
$('#JsEventTime').on('change',function(){
var selectDay = $('#JsEventDatetime').val().substr(0,10).replaceAll('/','-');
$('#UserEventDatetime').val(selectDay + ' ' + $('#JsEventTime').val());
});
});
//日付をフォーマット YYYY-MM-DD
function formatDate(date) {
const year = date.getFullYear();
const month = date.getMonth() + 1;
const mm = ('00' + month).slice(-2);
const day = date.getDate();
const dd = ('00' + day).slice(-2);
return `${year}-${mm}-${dd}`;
}
function addTimeList(time_array){
var optionDom='';
for(var i=0;i<time_array.length;i++){
optionDom += '<option value="' + time_array[i] + '">' + time_array[i] + '</option>';
}
$option = $(optionDom);
$('#JsEventTime').append($option);
}
</script>
そしたら、開いたカスタムフッターに貼り付けて、保存します。
これで、カレンダー入力フォームを利用する準備が完了しました。
2.日付入力のためにイベントウェビナー機能を利用する
2-1.イベントウェビナー画面を開く
シナリオ管理メニューに戻って、イベントウェビナー画面を開きます。
2-2.使用するをクリック
「使用する」をクリックすると、イベント日付を入力するフォームが表示されます。
↓
2-3.イベント日付を設定する
イベント開催する日付が決まっている場合には、
「開催周期モード」を「指定日」のまま、「指定日」欄の「+追加」をクリックして日付を入力しまくります。
開催する日が定期的に決まっている場合には、
「毎週○曜日」とか「毎日」とかを選択して曜日や時間を入力します。
今回は毎週火、木曜の10時〜と15時〜の週に4回開催のイベントがあるとして設定をしてみます
忘れちゃいけないのが、開催日の表示件数の設定。
これを間違えると、「一番最初の1回分しか表示されないんだけど???」ってなっちゃいます。
表示させたい件数分に設定します。今回は20回分とか表示させちゃいますね。
もう一つ忘れちゃいけないのが開催期間の設定。
これをちゃんとやらないと、登録フォームを開いたときにエラーがでちゃいます。だいたいここを忘れていることがエラー原因になります。
ここの終了日時を2099年とかにしちゃいます。
で、保存します。
3.登録フォームを表示して確認する
ここまできたら、シナリオ管理メニューの登録フォームを表示ボタンから登録フォームをクリックします。
そうすると、こうなって…
日付をクリックすると、こうなります
日付の入力部分と時間の入力部分が別れていて、
日付を選択すると、その日付の入力できる時間だけが時間の選択肢に表示されます。
4.おまけ
このままだと、確認画面で選択したイベント日付が表示されません。
こんな感じになっちゃいます…
なので…
シナリオ管理メニューの「登録フォームデザイン」から確認ページの設定を変更します。
「確認ページHTML」のタブをクリックして
本文のところの、「メールアドレス」のところまでスクロールして、
メールアドレスの部分をコピーして、
イベントの開催日の表示を追加します。
よくわかんない場合はこのコードをコピペしてください。
<!-- 開催日 -->
<div class="input_unit required">
<div class="my_column my_left">
<div class="label_frame">
<label class="form_input_label">開催日</label>
</div>
</div>
<div class="my_column my_right">
<div class="confirm_value">%event_datetime_and_dayofweek_jp%</div>
</div>
</div>
メールアドレスの下のここに貼り付けます。
下の保存ボタンを押して、もう一度、登録フォームを表示しなおして確認画面までいくと…
幸せになれました。
よくわかんないよーと言う場合にはTwitterからご連絡いただければ対応できると思います。ご連絡ください!
設定代行は基本的に有償で対応していますが、マイスピーの使い方をZoomで教えてほしいよーという場合は無償で対応していることが多いです。
ぜひお声掛けください!
この記事が気に入ったらサポートをしてみませんか?