開発情報・ナレッジ

投稿者: ShiningStar株式会社 2024年1月26日 (金)

フォーム締切設定をより細かく設定する方法

フォームブロックの締切設定により開始日時と終了日時を設定する事は可能ですが、
特定の時間(例えば営業時間9:00~18:00のみ)のみ表示したいであったり、土日はクローズしたいといった場合はデフォルトの設定では不可能です。
今回の記事は上記の設定を可能とする為のカスタマイズ記事となります。

今回は例として
平日月曜日から金曜日までかつ9:00から18:00の間で
特定の日付を締め切る条件で進めさせていただきます。

実装方法


まずはじめに受け付けたいフォームブロックと
受付けたくない場合の締切表示用のフリーコンテンツブロックや、
別に表示したいフォームブロックの2つを作成してください。

そしてページを作成してください。
bodyタブをソースデザインで作成し以下のソースを貼り付けてください


HTMLソース

<th:block th:if="${cp.result.value['viewFlg'] eq false}">
<sp:block name="締切ブロックID"></sp:block>
</th:block>
<th:block th:if="${cp.result.value['viewFlg'] eq true}">
<sp:block name="登録フォームブロックID"></sp:block>
</th:block>
その後PHPタブへ移動し下記ソースを貼り付けてください。

PHPソース

<?php
// 曜日の数値とその意味のリスト(参照用)
// 1: 月曜日
// 2: 火曜日
// 3: 水曜日
// 4: 木曜日
// 5: 金曜日
// 6: 土曜日
// 7: 日曜日

// 曜日の設定
$weekdayStart = 1;  // 週の開始曜日(1:月曜日)
$weekdayEnd = 5;    // 週の終了曜日(5:金曜日)

// 営業時間の設定
$businessHourStart = '09';  // 営業開始時間('09': 午前9時)
$businessHourEnd = '18';    // 営業終了時間('18': 午後6時)
// クローズしたい特定の日付の設定(例として3が日とGW、大晦日をクローズ)
$specificDays = ['0101', '0102', '0103', '0503', '0504', '0505', '1231'];  // 特定の日付(0詰め4桁)

// 現在の曜日、時間、月、日を取得
$dayOfWeek = date('N'); // 曜日(1(月曜日)から7(日曜日))
$hour = date('H'); // 時間(00から23)
$monthDay = date('md'); // 月と日(0101から1231)

// 平日かどうか
$isWeekday = $dayOfWeek >= $weekdayStart && $dayOfWeek <= $weekdayEnd;

// 指定された時間帯かどうか
$isBusinessHours = $hour >= $businessHourStart && $hour < $businessHourEnd;

// 特定の日付以外かどうか
$isNotSpecificDays = !in_array($monthDay, $specificDays);

$SPIRAL->setTHValue('viewFlg', false);

if ($isWeekday && $isBusinessHours && $isNotSpecificDays) {
    $SPIRAL->setTHValue('viewFlg', true);
}
?>

使い方

thymeLeafにviewFlgをtrueまたはfalseで渡す事によって
ブロックの出し分けを行っています。

時間や特定の日付等を変更したい場合はそれぞれのPHPのソースを編集してください。

解決しない場合はこちら コンテンツに関しての
要望はこちら