お店が今やってるかどうか、アクセス時点の営業情報を表示する(Plugin_Scheduleと連動)
「今、営業しているかどうか」を表示するカスタマイズ
アクセスした時点での時間(%{G}時%{i}分)をもとに「今、営業しているかどうか」を表示するカスタマイズです。
Plugin_Scheduleモジュールで指定した「休日」や「メッセージ」と、連動して表示できます。
メッセージとは、Plugin_Scheduleの変数{item}のことです。
雑ですみませんが、紹介します。
デモ
デモを見る →
実際のスケジュール(7月5日は休みとか)が設定されていないので、デモといっても分かりづらいかもしれません。
「営業しているかの判別箇所がある」「営業カレンダーがある」ってことが伝わればOKです。
このカスタマイズの対応バージョン
〜Ver. 2.7.7
2017-05-21時点での情報です。
手順
- 定休日カレンダーを作る
- 今の営業案内を表示させる(例えばTOPページに)
カスタマイズ作業は、大きくこの2つに別れています。
1.定休日カレンダーを作る
1-1.スケジュール管理で、スケジュールセットの設定をする
スケジュールセットを作成。
「セット名」「説明」は何でもOK
ラベルを設定する。
「ラベル名」「クラス」を入力。
ここで決めたクラスを、あとで使います。
登録データの入力
日にちごとに「休み」を設定します
1-2.営業日カレンダーとして表示できるようにする
カレンダーを表示させたいページに、モジュールIDを組み込みます。
ここでは仮に、カテゴリー「cal-demo」に表示するとします。
こんな感じで、専用のテンプレートを作りましょう。
あと、このカテゴリーは、キャッシュさせない方が良いです。
運用次第ですが、営業日の更新がすぐ反映できる方が良いですよね。
そこで、ルール機能を使って「営業カレンダー」カテゴリーだけ、キャッシュさせないコンフィグ設定をしましょう。
Plugin_ScheduleのモジュールIDを作る
まずは、休みか営業かが分かるカレンダー表(七曜表)
↓次に日ごとの詳細が分かるリストを作る。
カレンダー表(七曜表)と、リストに、それぞれモジュールIDを設定する。
サイトによっては七曜表だけで良いかも。
classが付与されていたら成功です。
色づけはcssで行いましょう。
2.TOPページなどに今の営業案内を表示させる
ここまでは、ふつうにPlugin_ScheduleのモジュールIDを使った「定休日カレンダー」です。
ここからが営業時間の判定です。
2-1.postincludeで、キャッシュさせない状態にする
postincludeって何?という方でも、とりあえずコピペすれば分かると思います。
まず目的です。
1ページの中で「ただいまの営業案内」だけ、キャッシュさせないようにしたいです。
たとえば、TOPページそのものはキャッシュが効いているんだけど、営業案内の箇所だけはいつでも最新情報として表示させたい、ということです。
なぜならキャッシュさせると、アクセスした時間での表示ができなくなるからです。
例えば午後8時にアクセスしているのに、正午の情報を表示しちゃうと、本当は閉店時間すぎてるのに「いま営業してます!」とか表示されて困ります。
「キャッシュさせないポストインクルード」のソース
これをコピペすれば、いけるはずです。
「ただいまの営業情報」を表示させたい箇所に、貼り付けましょう。
<form action="" method="post" class="js-post_include-ready" > <!-- キャッシュがオンでもランダム表示が可能になる記述ここから--> <input type="hidden" name="hash" value="Math.random()" class="js-post_include-eval_value" /> <input type="hidden" name="query[]" value="hash" /> <!-- キャッシュがオンでもランダム表示が可能になる記述ここまで--> <input type="hidden" name="tpl" value="include/openinfo/hantei.html" /> <input type="hidden" name="bid" value="%{BID}" /> <input type="hidden" name="ACMS_POST_2GET" /> </form>
ソースの解説
ちなみに「キャッシュがオンでもランダム表示が可能になる記述」が
なぜそうなるのか、僕も詳しく分かっていないです。
たしか、厳密には違うページとして読み込むことで、結果的にキャッシュが効かないよって話だと記憶してます。
くわしくは下記を参照ください
「キャッシュさせないポストインクルード」については、フォーラムで質問しました。
参照資料として、ごらんください。
フォーラムでの質問
2-2.インクルード先のファイルを用意する
hante.htmlを作る。
hante.htmlも、Plugin_Scheduleのスニペットを貼り付けて作ります。
そのあとは基本的に「営業カレンダー」に表示している情報を、IFブロックで判定していく作業になります。
営業しているかどうか判定させるIFブロックの概要
こんな順にIFブロックで判定していきます。
- 今日を特定
- 今日は休みか判定
- 営業時間を判定
- 短縮営業(午後1時〜営業)なのか判定
具体的な作業は下記です。
2-3.「営業しているか」判定用のモジュールIDを作る
IFブロックでの判定作業より前に、モジュールIDを2つ用意します。
そして、IFブロックを書いていくわけですが
ソースを見た方が早いと思うので、下記「判定箇所のソース(例)」をごらんください。
判定箇所のソース(例)
<div class="module-header clearfix"> <h2 class="">ただいまの営業案内</h2> <span class="timeInfo">%{G}時%{i}分時点でのご案内</span> </div> <div class="openInfo"> <!-- BEGIN_MODULE Plugin_Schedule id="calendarThis" --><!-- BEGIN unit:loop --> <!-- BEGIN month:loop --> <!-- BEGIN week:loop --> <!-- BEGIN day:loop --> <!-- BEGIN day:veil --> <!-- BEGIN_IF [{day}/eq/%{d}] --><!-- ▼▼▼今日を特定 --> <!-- BEGIN dayClass:veil --> <!-- BEGIN_IF [{dayClass}/eq/yasumi] --><!-- ▼▼▼休みか判定 --> <div class="kekka"><span class="shopClose">CLOSE</span>本日は臨時のお休みです。</div><span class="timeInfo">(%{n}月 %{j}日時点でのご案内)</span> <!-- ELSE_IF [{dayClass}/eq/eigyou] --><!-- 臨時営業 --><div class="kekka"><span class="shopOpen">OPEN</span>本日は臨時で営業しています。</div><span class="timeInfo">(%{n}月 %{d}日時点でのご案内)</span> <!-- ELSE_IF [{weekNo}/lk/w0] --><div class="kekka"><span class="shopClose">CLOSE</span>日曜日は定休日です。</div><span class="timeInfo">(%{n}月 %{d}日時点でのご案内)</span> <!-- ELSE --><!-- ▼▼▼休みでもなく日曜でもない --> <!-- BEGIN_IF [%{G}%{i}/lt/945] --><!-- ここから営業時間を判定 --> <!-- ▼▼▼18時30分以降である --><div class="kekka"><span class="shopClose">CLOSE</span>開店時間まで、お待ちください。</div><p class="normalTime"><span class="acms-icon acms-icon-time"></span>通常、午前9:45〜開店いたします。</p> <!-- ELSE_IF [%{G}%{i}/gt/1830] --><!-- ▼▼▼18時30分以降である --><div class="kekka"><span class="shopClose">CLOSE</span>本日の営業は終了いたしました。</div> <!-- ELSE --><!-- ▼▼▼営業中である --> <div class="kekka"><span class="shopOpen">OPEN</span>本日、営業日です。</div> <!-- BEGIN_IF [{dayClass}/eq/gogoichi] --><!-- ▼▼▼午後1時〜営業 --> ※本日は午後1時より営業<hr class="clear"> <!-- ELSE --><p class="normalTime"><span class="acms-icon acms-icon-time"></span>午前9:45〜午後6:30まで</p><hr class="clear"> <!-- END_IF --><!-- ▲▲▲後1時〜営業 --> <!-- END_IF --> <!-- END_IF --><!-- ▲▲▲休みか判定 --> <!-- END dayClass:veil --> <!-- END_IF --><!-- ▲▲▲今日を特定 --> <!-- END day:veil --> <!-- END day:loop --> <!-- END week:loop --> <!-- END month:loop --> <!-- END unit:loop --> <!-- END_MODULE Plugin_Schedule --> </div>
- 今日を特定
- 休みか判定
- 営業時間を判定
- 短縮営業(午後1時〜営業)なのか判定
ソースから、この流れでIFブロックを使っていることが、分かると思います。
条件を加えたいなら、IFブロックを書き足していけばいい
条件を加えないときは、対応するスケジュールのラベルも増やすます。
例えば「閉店時間がいつもより3時間早い」とか。
そもそも、どのくらいの精度で判定させたいかによって、ここは変わります。
2-4.メッセージは、スケジュールの変数{item}を使って表示させる
営業日・営業時間の判定とは別に、日ごとのメッセージ({item})も表示できます。
そのためにモジュールID「calendarThisItem」を使います。
メッセージ({item})箇所のソース
<!-- BEGIN_MODULE Plugin_Schedule id="calendarThisItem" --><!-- BEGIN unit:loop --> <!-- BEGIN month:loop --> <!-- BEGIN week:loop --> <!-- BEGIN day:loop --> <!-- BEGIN day:veil --> <!-- BEGIN_IF [{day}/eq/%{d}] --><!-- ▼▼▼今日を特定 --> <!-- BEGIN plan --><!-- BEGIN item:veil --><p class="">「{item}」</p><!-- END item:veil --><!-- END plan --> <!-- END_IF --> <!-- END day:veil --> <!-- END day:loop --> <!-- END week:loop --> <!-- END month:loop --> <!-- END unit:loop --> <!-- END_MODULE Plugin_Schedule -->
{item}を表示するには、スケジュールのモジュールIDで「リスト表示」に指定する必要があります。
「七曜表」の表示では、{item}が表示できないです。(たぶん)
そのため、こうして別のモジュールを使うことになります。
雑でごめんね。
雑ですみませんが、これでスケジュールと連動しら「今の営業案内」ができます。
営業前のセリフとか、営業終了後のセリフとか考えるのが楽しいですよ。
RPGツクール思い出します。
さらに盛り込むなら
標準のグローバル変数は、今日の「時間」「分」だけです。
「明日」に関するグローバル変数を作れば、さらに色々できそうです。
たとえば、定休日に「明日は9時から営業します!」とか「明日から10%オフセールです!」とか表示できるのでは?