印刷用表示へ切り替え 通常表示へ切り替え 更新履歴を表示 更新履歴を隠す
MovableType 月別アーカイブへのリンクを nDialy 風に

メインインデックスの月別アーカイブへのリンク表示を nDialy 風にする。

■ ■ ■
長くなった月別アーカイブへのリンク
長くなった月別アーカイブへのリンク

ブログを長く続けると,月別アーカイブが増えてくる。それと同時にアーカイブへのリンクの行数も増えていく。ブログを始めたばかりの頃は1か月にいくつ投稿したかが励みになったが,最近はどうでもよくなってきた。年間の投稿数くらいはあってもいいかな,くらいな感じである。そこで,月別アーカイブへのリンクを圧縮して表示することを考える。

もともとのコードは次の通り。

<MTArchiveList archive_type="Monthly">
<a href="<$MTArchiveLink$>"><$MTArchiveTitle$></a> (<$MTArchiveCount$>)<br />
</MTArchiveList>

とても単純である。しかし,出力結果は若干冗長である。簡潔な表示方法としては,nDiary の表示がある。この表示をマネるのがよさそうだ。お手本は Junkline - MT の過去ログリンク表示を nDiary (ごにょり済み)風に で,さらに手を加えて月の順序を 01, 02, 03,... の順序にする。

使用するプラグインは,年をまとめるために Archive Date Header Plugin :: Adam Kalsey,月を昇順にするために Brad Choate: PerlScript Plugin を使う。動作確認は Movable Type 2.661 で行った。

メインインデックスのテンプレートに書くコードは次の通り。

<MTArchiveList archive_type="Monthly">
<MTArchiveDateHeader>
<a href="<$MTBlogArchiveURL$><$MTArchiveDate format="%Y.html"$>">
<$MTArchiveDate format="%Y"$></a>:
</MTArchiveDateHeader>
<MTPerlScript>
$m = '<a href="<$MTArchiveLink$>"><$MTArchiveDate format="%m"$></a> ';
push(@ma, $m);
$a = '<$MTArchiveDate format="%Y"$>';
$b = '<MTArchivePrevious><$MTArchiveDate format="%Y"$></MTArchivePrevious>';
if ($a ne $b) {
  print reverse(@ma), "<br />";
  @ma = ();
}
</MTPerlScript>
</MTArchiveList>

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

2006: 01 02 03 04 05 06
2005: 01 02 03 04 05 06 07 08 09 10 11 12
2004: 01 02 03 04 05 06 07 08 09 10 11 12

注意が必要なのは,年の最後の処理である。月を逆順に並べ替える配列をクリアし,改行 <br /> を挿入する必要があるのは次の2つの場合がある。

  • 12月まで記事がない場合は,記事がある月の後で実行
  • 12月まで記事がある場合は,12月の後で実行

この動作は,意味合い的にはMTArchiveDateFooter にあたるタグで行いたいのだが,Archive Date Header Plugin では提供されていない。そこで,MTArchiveDateFooter は MTPerlScript の力を借りて実装する。このアイデアについては,Archive Date Header Plugin :: Adam Kalsey のコメント欄にあるのを ぬりかべブログ :: ArchiveDateHeader Plugin の応用 さんが解説してくれている。

MTArchiveList には sort_order 属性を指定することができない。必ず降順になってしまう。月を昇順に並べ替えるのに,ここでは MTPerlScript プラグインを使ったが,PHP が使えるのであれば PHP スクリプトでもできるようだ(Chitatopops: Movable Type: 月ごとのアーカイブのリストを登り順にまけないこと投げ: MTArchiveListで昇順ソートを使う)。

2006年6月27日追記:
投稿のない月も表示する方法もあります(nlog(n): 月別アーカイブへのリンクをもっと nDialy 風に)。

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

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


(必須, 表示されます)


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


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


Confirmation Code (必須)


Remember info (R)?