今日はMovable Typeのサブカテゴリの表示で大ハマリした話。
11月末の展示会用広報blogで使用するMovable Typeの設定作業。今日は主にスタイルシートとテンプレートの調整。
CSSの研修を受けてきてエキスパートな(はずの)後輩にスタイルシートは任せ、こちらは各テンプレートを調整。ロジックとデザインの分離。これこそが21世紀のWeb。すばらしい。
で、こちらも手を入れつつスタイルシートはほぼ完成。しかし、テンプレートが一個所だけ期待通りの動作をしないのです。
Movable Typeのアーカイブ用テンプレートには幾つかあり、
- カテゴリ毎に記事の一覧を表示するカテゴリ・アーカイブ用テンプレート
- 各記事を一つずつ表示する個別エントリーアーカイブ用テンプレート
- 登録日毎に記事の一覧を表示する日付アーカイブ用テンプレート
の3つがデフォルトで用意されています。
今使用している Movable Type 3.171 にはサブカテゴリを作る機能があり、階層的にカテゴリを作成できます。
現在作成中のblogは2カラム(カテゴリ表示などインデックスが左、記事が右)ですが、デフォルトのテンプレートではメインインデックス以外は1カラムで記事のみの表示です。そこで各テンプレートを2ペインにしてみましたが、カテゴリ・アーカイブ用テンプレートだけカテゴリーリストとリンクが表示されません。付属のマニュアルなどで調べてみたが、条件式に従って下位のカテゴリを順次表示していること程度しか読み取れません。他のテンプレートではきちんと表示されているのに。何故。
時間ばかりが過ぎていきます。とりあえず使っているタグをキーにして検索検索。
そして見つけたのがこの記事。小粋空間さんの「カテゴリーアーカイブで全サブカテゴリーリストを表示」というエントリです。この情報をまとめると、
デフォルトで使用されている、カテゴリーの階層構造を作るための MTSubCategories タグは、このタグがある記事から下位のカテゴリーしか表示しない
とのこと。これを回避して、常に最上位からの下位までのカテゴリーを表示するには、MTSubCategories の代わりに MTTopLevelCategories タグを使用すれば実現できると書かれておりました。マニュアルには、
- MTTopLevelCategories
- MTSubCategoriesのクローン。ただし、カテゴリー階層の最上位で常に開始します。
と書かれています。そうか、これを使えばいいのか。
ということで、早速書き直し。おお、動きました! 感謝です。これで安心して週末が迎えられます。感謝の気持ちを込めてトラックバックを贈らせて頂きます。ありがとうございました。
なお、記述例は以下のような形です。MTTopLevelCategories を使うのがポイントです。
<div class="menu">
<div id="categories">
<h2>メニュー</h2>
<MTTopLevelCategories include_current="1">
<MTSubCatIsFirst><ul></MTSubCatIsFirst>
<MTIfNonZero tag="MTCategoryCount">
<li><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>"> <MTCategoryLabel> </a>
<MTElse>
<li><MTCategoryLabel>
</MTElse>
</MTIfNonZero>
<MTSubCatsRecurse>
</li>
<MTSubCatIsLast></ul></MTSubCatIsLast>
</MTTopLevelCategories>
</div>
</div>
あとは、Movable Type 3.2 にいつアップデートするかが悩み所です。あと1週間早くリリースしてくれればアップデートして設定したのに。うむ。