印刷用表示へ切り替え 通常表示へ切り替え 更新履歴を表示 更新履歴を隠す
MovableType MTCountdown で生後何日を表示する

MTCountdown プラグインを使って,「生後何日」や「何歳」を表示する。

■ ■ ■

MTCountdown プラグインは,指定した日時までのカウントダウン表示を行うプラグインである (David Raynes: MTCountdown Archives)。このプラグインでは,カウントダウンだけではなく,指定日付からのカウントアップも表示することができる。カウントアップ機能を使えば,生まれたこどもの「生後何日」や,出産前の「第何週目」などの表示を行うことができる。もちろんペットや植物に使ってもいい。

プラグインの最新版は,2004年2月公開のバージョン 0.4 でかなり古いが (David Raynes: MTCountdown v0.4),特殊なことはしていないので MT の最新バージョンでも動作する。ダウンロードして,plugins ディレクトリに入れればよい。

テストをしてみたところ,MT 4.1/MTOS, MT 2.661 で動作した。MT 3 でも大丈夫だろう。MT 4/MTOS 以降では,plugins ディレクトリ内にプラグイン用のサブフォルダを作るのがデフォルトの作法になっているが,サブフォルダを作らずにそのまま countdown.pl を置いてよい。

MTCountup タグ内では,起点となる日付を date 属性で指定する。総日数を表示したい場合は count_only 属性を追加する。count_only 属性には,years, weeks, days, hours, minutes, seconds を指定することができる。複数の値を指定したいときには,「count_only="weeks,days"」のようにカンマで区切る。

MTCountdown で表示できるのは,再構築日時と指定日時の差である。オリジナルのプラグインでは,個別記事で表示しても再構築日時との差になってしまう。そこで,個別記事のテンプレートに MTCountup タグを置けば,投稿日時と指定日時との差になるように,プラグインに手を加えることにする。強調部分を追加すればよい。

  $until = timegm ($sec, $min, $hour, $day, $month-1, $year);
  my $now = offset_time (time, $ctx->stash ('blog'));
  if (my $entry = $ctx->stash ('entry')) {
    my $created_on = MT->version_number >= 4 ? $entry->authored_on : $entry->created_on;
    ($year, $month, $day, $hour, $min, $sec) = $created_on =~ m|^(\d\d\d\d)(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)|;
    $now = timegm ($sec, $min, $hour, $day, $month-1, $year);
  }

兄弟姉妹が複数いて,それぞれを別のカテゴリに振り分けているのであれば,MTIfCategory タグを使って表示の有無を変えるのが便利だろう (MTIfCategory | テンプレートタグリファレンス)。例えば,「太郎」の生年月日時は「2004-01-26 22:57:21」,花子は「2008-04-01 00:15:00」だとすると,個別記事アーカイブテンプレートの記事本文の中に設置するなら以下のように書けばよい。

例題の日付は,うまいのが思いつかなかったので,このブログの第1回目第1001回目の投稿のものになっている。総日数と積算年月を分けるために MTCountup を別々に呼んでいる。MT 2.661 などの旧いバージョンではカテゴリに日本語を指定することができないので,代わりにラベル属性で「MTIfCategory label="Taro"」などとする必要がある。「MTCountupIfDays」タグは,中の日付が正の数値であるかどうかをチェックしている。「MTCountupIfYears」も同様のチェックを行うため,「0 歳」の表示をさせたい場合は,これで囲まないようにする。

<MTEntryCategories>
<MTIfCategory name="太郎">
<p>太郎 生後
<MTCountup date="2004-01-26 22:57:21" count_only="days">
<MTCountupIfDays><$MTCountupDays$> 日</MTCountupIfDays>
</MTCountup>
<MTCountup date="2004-01-26 22:57:21">
(<$MTCountupYears$> 歳)
</MTCountup>
</p>
</MTIfCategory>
<MTIfCategory name="花子">
<p>花子 生後
<MTCountup date="2008-04-01 00:15:00" count_only="days">
<MTCountupIfDays><$MTCountupDays$> 日</MTCountupIfDays>
</MTCountup>
<MTCountup date="2008-04-01 00:15:00">
(<$MTCountupYears$> 歳)
</MTCountup>
</p>
</MTIfCategory>
</MTEntryCategories>

再構築すると次のような表示になる。

太郎 生後 1806 日 (4 歳)

花子 生後 280 日 (0 歳)

残念ながら,1か月の日数が月ごとに違うため,「MTCountupMonth」タグは実装されておらず,対応の予定もないと作者はブログに書いている (David Raynes: MTCountdown v0.4)。つまり「?か月」の表示はできない。Date::Calc あたりを使えばできそうだが…。→できるようにしました (nlog(n): MTCountdown を「何年何か月」に対応させる)

2009年1月7日追記:
個別記事に設置した場合は,投稿した時点でのカウントになるように,プラグインを修正する方法を追加しました。

2009年1月14日追記:
「?ヶ月」の表示を可能にするパッチを公開しました (nlog(n): MTCountdown を「何年何か月」に対応させる)。

Posted by n at 2009-01-06 04:15 | Edit | Comments (0) | Trackback(0)
Trackbacks

  • 「手違いで複数トラックバックを送ってしまった!」という場合でも気にしないでください (重複分はこちらで勝手に削除させていただきます)
  • タイムアウトエラーは,こちらのサーバの処理能力不足が原因です (詳細は トラックバック送信時のエラー をご覧ください)
  • トラックバックする記事には,この記事へのリンクを含めてください(詳細は 迷惑トラックバック対策 をご覧ください)
Comments
Post a comment
  • 電子メールアドレスは必須ですが,表示されません (気になる場合は「メールアドレスのような」文字列でもOKです)
  • URL を入力した場合はリンクが張られます
  • コメント欄内ではタグは使えません
  • コメント欄内に URL を記入した場合は自動的にリンクに変換されます
  • コメント欄内の改行はそのまま改行となります
  • 「Confirmation Code」に表示されている数字を入力してください (迷惑コメント対策です)


(必須, 表示されます)


(必須, 表示されません)


(任意, リンクされます)


Confirmation Code (必須)


Remember info (R)?