経過時間で切り替えるプラグイン

Movable Type って(もしくはウェブログCMS全般に言えることかもしれないけど)、コンテンツの管理時間の最小単位って、基本、「日単位」の管理なんだよね。標準のタグを駆使してテンプレート作ってみても、「最近の何日分」って表示は作れても、「何時間以内の更新」って表示は作れない。

「日の区切り」は毎日0時の日付変更が基準になってるから、前日23時に更新した内容も1時間後の0時を過ぎると、まだ更新してから1時間しか経ってない内容も「1日前の更新」として扱われてしまうことになる。

というわけで、「更新してからの時間単位で表示を切り替えたい!」ということが標準のタグで出来なかったのでプラグインでこれをできるようにしてみました。とりあえずダウンロードはこちら。

(EffectiveTime.zip 1.30KB)

一応注意なんですが、このプラグイン、Movable Type のバージョン2.661でしか動作確認してません。たぶん、バージョン3以降でも動きそうだけど確認してないのでなんとも。(にも関わらずバージョン3以降対応のプラグイン概要説明とかはなぜか実装してますが。)

このプラグインはコンテナタグとして動作します。タグに指定された時間を基準にそのタグの内容を表示するかしないかを切り分ける機能を持っています。利用出来るようになるタグは以下の2つ。

<MTIfEffectively hours="24">
24時間以内の更新の場合に表示されます。
</MTIfEffectively>

<MTIfInvalidity hours="24">
更新から24時間より経過している場合に表示されます。
</MTIfInvalidity>

ちょっとわかりにくいかもしれませんが、<MTEntries>のエレメント内で指定されていれば「エントリー内容」が対象オブジェクトに、<MTComments>のエレメント内で指定されていれば「コメント内容」が対象オブジェクトに、<MTPings>のエレメント内で指定されていれば「トラックバック内容」が対象オブジェクトに、その時間でのオブジェクト取得切り替えを行えます。

パラメータ(アトリビュート)に関しては2つ用意されています。

hours [設定範囲:0-999 省略時:0]
切り替えの経過時間(有効時間、もしくは無効時間)を時間単位で指定します。

offset [設定範囲:0-999 省略時:0]
切り替えの経過時間(有効時間、もしくは無効時間)の基準時間を指定時間分ずらします。

hoursの指定の意味はすぐわかると思うのですが、offsetはちょっと複雑な時間切り替えを行いたいときに有効です。offsetを利用した複雑な切り替えを例で説明します。

例)
コンテンツ更新時間が0時ちょうどだったとします。

<MTIfEffectively hours="3">
0時から3時までの間表示されます。
</MTIfEffectively>

<MTIfEffectively hours="3" offset="3">
3時から6時までの間表示されます。
</MTIfEffectively>

<MTIfEffectively hours="3" offset="6">
6時から9時までの間表示されます。
</MTIfEffectively>
というような多段階の時間切り替えを行えるようになります。(たぶん段階を増やしすぎるとビルド負荷が高くなると思うのでホドホドに。)

テンプレートへの設定の例の1つとして、新着コメントに新着表示を付ける場合の記述は以下のような感じになります。

例)
最新のコメント6件の降順表示で24時間以内の新着コメントに「New! 」を表示

<MTComments lastn="6" sort_order="descend">
<p>
<MTIfEffectively hours="3">New! </MTIfEffectively>
<$MTCommentAuthor$>
said:>br />
<$MTCommentBody$>
</p>
</MTComments>

というような感じになります。

まあ、そんな感じのプラグインなわけですが、これ、普通はあんまり役立たないと思います。1日の間に何回も更新されるような使い方をしてるサイトの場合だと使い道がありますが、1日に1回程度の更新、コメントやトラックバックもそんなに無いよー、って様な場合だとあんまり利用価値無いかなー。ニッチ産業万歳。

ちなみにハンチングでは、トップページの情報メモ表示にこのプラグインを使ってます。ってか、ここに使いたくてこのプラグイン作ったんだけど。情報メモの各カラムを経過時間ごとに切り替えています。

書き込みから3時間以内
書き込みから24時間以内
24時間より前の書き込み
って感じに色分けしています。