2004年10月25日
Movable Type日本語版3.1に切り替えてから、若干苦労したサブカテゴリ関係のをつらつらと。
僕はサイドバーの<ul>、<li>を両方ともスタイルシートで"margin:0px;"と指定している。
その為、メイン(親)カテゴリとサブ(子)カテゴリとを両方とも表示させると、
縦に一列にズラッと親子で並んでしまうので、相当見難い。
おまけにカテゴリのエントリー数をテーブルを使って右端に表示しているので、
色々なサイトで使われている、<li>や<dl>を使用した形式を使うことが出来なかった。
[ 参照 : <li>を用いた形式 / Melog ]
<MTSubCategories>
<MTSubCatIsFirst><ul></MTSubCatIsFirst>
<li><a href="<$MTArchiveLink$>"><$MTArchiveTitle$></a>
<$MTSubCatsRecurse$>
</li>
<MTSubCatIsLast></ul></MTSubCatIsLast>
</MTSubCategories>
[ 参照 : <dl>を用いた形式 / Melog ]
<dl>
<MTSubCategories>
<dt>
<a href="<$MTArchiveLink$>"><$MTArchiveTitle$></a>
</dt>
<dd>
<$MTCategoryDescription$>
<MTHasSubCategories>
<dl>
<$MTSubCatsRecurse$>
</dl>
</MTHasSubCategories>
</dd>
</MTSubCategories>
</dl>
如何ともし難い…。
しかも、サブカテゴリのエントリは
その親であるメインカテゴリのものとしてはカウントされないので、
メインカテゴリはいつまでもエントリ数0のまま、デッドリンク状態。
これを防ぐには1つ1つのエントリに複数のカテゴリを宛がう必要がある(?)のですが
ある程度サイトが膨らむと、かなり面倒。
なので、サブカテゴリにだけ、<a>を使いたい。
そこでマニュアル読んでひねり出したのは以下の方法。
<table cellpadding="0" cellspacing="0" border="0">
<MTSubCategories>
<tr valign="top">
<td nowrap width="80%">
<MTHasParentCategory>
<a href="<$MTCategoryArchiveLink$>">
</MTHasParentCategory>
<MTHasSubCategories>
</td></tr>
<tr><td colspan="2">
<br />
</td></tr>
<tr valign="top">
<td nowrap width="80%">
<b></MTHasSubCategories>
<$MTCategoryLabel$></b>
::</MTHasSubCategories>
<MTHasParentCategory></a>
</MTHasParentCategory>
</td>
<td align="right">
<MTHasParentCategory>
:: <$MTCategoryCount$>
</MTHasParentCategory>
</td></tr>
<MTHasSubCategories>
<$MTSubCatsRecurse$>
</MTHasSubCategories>
</MTSubCategories>
</table>
[2004 10/31 更新]
ウチのサイトのコードをそのまま載せましたが、ご覧の通り、長大。
しかしながらこれで、エントリ数を右端に寄せたまま、
所謂、階層構造的な見せ方を実現することが出来ました。
書き方として少し邪道なのかも知れませんが、
上手く目的通りに表示されたので良いんです。
そして、もう1つ。
カテゴリアーカイブで、カテゴリ名をページ内に表記している場合って
かなり多いと思うんですが、サブカテゴリのアーカイブにおいては、
標準ではそのカテゴリの親であるメインカテゴリ名までは表示されません。
折角サブカテゴリという面白い機能を導入したのなら、
サブカテゴリのアーカイブのタイトルにメインカテゴリ名も表示したい。
ってわけで、サブカテゴリ名の前にメインカテゴリ名を表示させる方法。
カテゴリアーカイブのテンプレート内、
<$MTArchiveTitle$>
というタグを、
<MTHasParentCategory>
<MTParentCategory>
<$MTCategoryLabel$>
| </MTParentCategory>
</MTHasParentCategory>
と書き換える。
これで、メインカテゴリ名 | サブカテゴリ名と表示されます。
これまた他に効率良い方法があるのかも知れませんが。