月別アーカイブ内で月名と記事数を一覧表示することは,標準の機能として可能である。その一覧の中で,表示している月の月名を強調表示したい。MTTagInvoke プラグインと PerlScript プラグインを使って実装する。
■ ■ ■
Date-Based Archive テンプレートは,月別・週別・日別のアーカイブを作るための共通のテンプレートである。このアーカイブの中で,各月名と投稿数を表示することが次のコードで可能である。
<MTArchiveList archive_type="Monthly">
<a href="<$MTArchiveLink$>"><$MTArchiveTitle$></a>
(<$MTArchiveCount$>)<br />
</MTArchiveList>
例えば,次のような表示になる。
これによって表示されるリストの中で,今開いている月の表示を強調したい。
<$MTArchiveLink$> は,<MTArchiveList archive_type="Monthly"> の外側でも使うことができ,その場合表示している月・週・日のアーカイブへのリンクになる。<$MTArchiveDate$> や <$MTArchiveTitle$> 等も同様である。したがって,この値を <MTArchiveList> 内に持ち込むことができれば,その中で比較を行うことにより,強調タグを挿入することができる。コンテナタグ内に値を持ち込むには, MTSetVar, MTGetVar が使えそう。しかし,単純に持ち込むことはできない。<$MTSetVar name="thismonth" value="<$MTArchiveDate$>"$> などのようにタグを入れ子にできないからである。そこで,プラグインの力を借りることになる。
必要なプラグインは次の2つ。
Date-Based Archive テンプレートには,次のように書けばよい。PerlScript プラグインの使い方はZakimi::Blog: SideBarのアーカイブ一覧表示を変更 が参考になった。
<MTTagInvoke tag_name="MTSetVar" name="thismonth">
<MTTagAttribute name="value"><$MTArchiveDate format="%Y%m"$></MTTagAttribute>
</MTTagInvoke>
<MTArchiveList archive_type="Monthly">
<MTPerlScript>
$a = '<$MTGetVar name="thismonth"$>';
$b = '<$MTArchiveDate format="%Y%m"$>';
if ($a eq $b) {print "<strong>";}
print '<a href="<$MTArchiveLink$>"><$MTArchiveTitle$></a>';
if ($a eq $b) {print "</strong>";}
</MTPerlScript>
(<$MTArchiveCount$>)<br />
</MTArchiveList>
出来上がった表示は次のようになる(2004年12月を表示した場合)。
PerlScript プラグインを使う前に,Compare プラグインを使って次のようなコードを書いたが,上手く行かなかった。強調するタグが出力されなかったのである。
<MTTagInvoke tag_name="MTSetVar" name="thismonth">
<MTTagAttribute name="value"><$MTArchiveDate format="%Y%m"$></MTTagAttribute>
</MTTagInvoke>
<MTArchiveList archive_type="Monthly">
<MTIfEqual a="[MTGetVar name='thismonth']" b="[MTArchiveDate format='%Y%m']"><strong></MTIfEqual>
<a href="<$MTArchiveLink$>"><$MTArchiveTitle$></a>
<MTIfEqual a="[MTGetVar name='thismonth']" b="[MTArchiveDate format='%Y%m']"></strong></MTIfEqual>
(<$MTArchiveCount$>)<br />
</MTArchiveList>
2005年1月14日追記:
小粋空間: 選択されたアーカイブリンクを強調表示する(モジュール化対応版) では,Javascript による実装が紹介されています。
Posted by n at 2005-01-10 01:45 | Edit | Comments (0) | Trackback(3)