印刷用表示へ切り替え 通常表示へ切り替え 更新履歴を表示 更新履歴を隠す
MovableType MTCountdown を「何年何か月」に対応させる

MTCountdown プラグインにパッチをあてて,「何か月」の表示ができるようにする。

■ ■ ■

MTCountdown は,設定した日時まで,あるいは設定した日時から,の差の日時を表示する Movable Type 用のプラグインである (nlog(n): MTCountdown で生後何日を表示する)。1つ欠点があって,「年,週,日,時,分,秒」の表示はできるが「月」の表示ができない。先の記事で,個別記事の場合,記事の投稿日時と設定日時との差を表示する修正方法を紹介した。乗りかかった船なので,「月」の表示をできるようにするパッチを書いたので公開する。

動作確認は,MTOS 4.23-ja, MT 2.661 で行った。おそらく,これ以外のバージョンでも動作するだろう。

対象となる MTCountdown のバージョンは 0.4 である (David Raynes: MTCountdown Archives)。

作成したパッチは,countdown.pl.0.4.diff.txt。新たに必要となる Perl モジュールは Date::Calc である。このパッチには,先の記事で書いた修正も含まれているので,オリジナルの countdown.pl にあてること。

ここまで書き換えてしまうと,もはやパッチというレベルではないかもしれないが,作者の David Raynes さんに敬意を表してパッチとした。

パッチの中では Date::Calc のサンプルにある Normalize_Delta_YMD() のコードをそのまま使っている。これを使わずに Delta_YMD() をそのまま使うと,「11か月」が「1年-1か月」となったりすることがあって困ったからだ。パッチでは,「年,月,日」の計算に Date::Calc を使っている。このため「日」の精度も上がっている。

新たに使えるようになるタグは以下の通り。

  • MTCountdownIfMonths ブロックタグ (条件タグ)
  • MTCountdown ファンクションタグ
  • MTCountupIfMonths ブロックタグ (条件タグ)
  • MTCountup ファンクションタグ

個別記事テンプレートに挿入するサンプルは次の通り。MT4/MTOS であれば,<$mt:CountupMonths$> のような書き方をしてもよい。また,MT4/MTOS の場合は,新たにテンプレートモジュールを1つ作って,その中にこのコードだけを書き,「ブログ記事アーカイブテンプレート」から MTInclude するというのがスマートだろう。

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

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

太郎 生後 1814 日 (4 歳 11 か月)

花子 生後 288 日 (0 歳 9 か月)

MTCountdown 等,他のタグのテストは行っていない。多分大丈夫だとは思うのだが…。

Posted by n at 2009-01-14 21:24 | Edit | Comments (0) | Trackback(0)
Trackbacks

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


(必須, 表示されます)


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


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


Confirmation Code (必須)


Remember info (R)?