【a-blog cms】エントリーの日付が現在よりも古くなったら表示を出す方法(イベントの終了表示など)
a-blog cmsでエントリーの日付が現在よりも古くなった時の表示
おもにイベント用のページで、そのイベントが終わったら『終了』と表示する方法を紹介します。
(忘備録を兼ねた記事です)
具体例をあげると以下のような際に使えます。
【ライブ告知】
・ライブ情報を1エントリーで作成
・エントリーの日付はライブの開催日で作成
・ライブの告知がサイトに表示される
・ライブが終了したら(閲覧している時間がエントリーの日付を越えたら)、サイトには『満員御礼』などの表示
【イベント告知】
・イベントのお知らせを1エントリーで作成
・エントリーの日付はイベントの開催日で作成
・イベントの告知がサイトに表示される
・イベントが終了したら(閲覧している時間がエントリーの日付を越えたら)、サイトには『終了しました』などの表示
・・・・・
カスタマイズ方法
%{U} と {date#U}という2つの変数を利用します。
********************
グローバル変数 %{U}:Unix Epoch (1970 年 1 月 1 日 0 時 0 分 0 秒) から現在までの秒数
変数 {date#U}:Unix Epoch (1970 年 1 月 1 日 0 時 0 分 0 秒) からエントリーの日付までの秒数
********************
※使用モジュールはエントリーサマリーとエントリーボディーを想定しています。
↓グローバル変数の参考ページ(公式)
グローバル変数 | リファレンス | ドキュメント | a-blog cms developer
a-blog cms developer
グローバル変数は、テンプレートに記述することで、表示中のページが持つ情報を出力します。テンプレート上、モジュールやインクルードよりも先に処理されます。 ID(数字)の出力 %...
コード
以下、コードサンプルです。
条件分岐(if文)で表示 / 非表示を切り替えます。
{date#U} が%{U} 以下の場合、つまり、現在の時間よりエントリーに登録された日付が小さい(=古い)場合にタグが表示されます。
<!-- BEGIN_IF [%{U}/gte/{date#U}] --> <span class="label__date_past">開催終了</span> <!-- END_IF --> <!-- CSSで表示を調整してください --> <!-- モジュール内で使用してください -->
デフォルトのエントリーサマリーのスニペットの中で使用する場合のサンプルコード
<!-- BEGIN_MODULE Entry_Summary --> <div class="acms-margin-bottom-medium"> @include("/admin/module/setting.html") <!-- BEGIN notFound --> <p>ただいまページを準備しております。もうしばらくお待ちください。</p> <!-- END notFound --> <div class="acms-grid"> <!-- BEGIN unit:loop --> <!-- BEGIN entry:loop --> <div class="acms-col-md-4 js-autoheight-r"><!-- BEGIN image:veil --> <img src="%{ROOT_DIR}{path}" alt="{alt}" class="acms-img-responsive"><!-- END image:veil --><!-- BEGIN noimage --> <img src="/images/default/noimage.gif" alt="" class="acms-img-responsive"><!-- END noimage --> <h3>{title}</h3> <!-- BEGIN_IF [%{U}/gte/{date#U}] --> <span class="label__date_past">開催終了</span> <!-- END_IF --> <p>{summary}</p> <p><a href="{url}" class="acms-btn">詳細をみる</a></p> </div> <!-- END entry:loop --> <!-- END unit:loop --> </div> <!-- BEGIN pager:veil --> <div class="acms-text-center"> <ul class="acms-pager"> <!-- BEGIN backLink --><li><a href="{url}">« 前の{backNum}件</a></li><!-- END backLink --> <!-- BEGIN page:loop --><li{pageCurAttr}[raw]><span><!-- BEGIN link#front --><a href="{url}"><!-- END link#front -->{page}<!-- BEGIN link#rear --></a><!-- END link#rear --></span></li><!-- END page:loop --> <!-- BEGIN lastPage:veil --><li><span>...</span></li><li{pageCurAttr}[raw]><span><a href="{lastPageUrl}">{lastPage}</a></span></li><!-- END lastPage:veil --> <!-- BEGIN forwardLink --><li><a href="{url}">次の{forwardNum}件 »</a></li><!-- END forwardLink --> </ul> </div> <!-- END pager:veil --> </div> <!-- END_MODULE Entry_Summary -->
実装サンプル画像
注意点
以下の点に注意してください。
・エントリーの日付=イベントの開催日(多くのケースで未来)になっていること。
・エントリーの日付の時間を「イベントの終了予定時刻」にすること(イベント開始時刻とかに設定してあると、まだ終わっていないのに「終了」と表示されることになります)
・モジュールの<!-- BEGIN unit:loop --><!-- BEGIN entry:loop -->の中で使用しないと{date#U}が展開されません。
※ <!-- END entry:loop --><!-- END unit:loop -->で閉じるのも必須
・・・・・
余談
『イベントが終了したら表示させない』という方法もできないかと模索しました。
【イベント開催前の表示】
イベントA
イベントB
イベントC
イベントD
【イベント開催後の表示】
イベントA
イベントB
イベントC(一覧から消える)
イベントD(一覧から消える)
上記のように、イベントが終了したら『終了』表示ではなく、一覧表示から消える、というカスタマイズです。
if文やその他JavaScriptなどをいろいろ検討しましたが、いまいち上手くいかず悩むハメに。
う〜ん。
で。
よく考えたら、エントリーに『掲載期限』というものがデフォルトでありました。
灯台下暗し。
閲覧ありがとうございました。
参考になれば幸いです。