TopMovable Typeカスタマイズカテゴリー > 2004年11月
2004年11月24日

カテゴリーアーカイブで全サブカテゴリーリストを表示

Movable Type 3.11-ja ではサブカテゴリー機能が追加されました。それに伴いサイドバーメニューのカテゴリーリストにはこれまで通りの表示に加え、サブカテゴリー表示もできるタグ

<MTSubCategories>~</MTSubCategories>

が追加されました(関連タグは割愛)。
ところが、例えばメインページからカテゴリーアーカイブページにジャンプすると、サイドバーのカテゴリーリストにはそのカテゴリー配下のカテゴリーしか表示されなくなります。配下のカテゴリーが存在しない場合は何も表示されません。
カテゴリーリストの表示サンプルを下図に示します。

SubCategories1・メインページで表示されているカテゴリーリスト。ここでは全カテゴリーが表示されています。視覚的にお分かりになると思いますが、トップカテゴリーに「ウェブログ」「趣味」、「ウェブログ」カテゴリーのサブカテゴリーに「こうさぎ」「カスタマイズ」、「カスタマイズ」カテゴリーのサブカテゴリーに「テンプレート」「折りたたみ」、「趣味」カテゴリーのサブカテゴリーに「映画」「読書」があります。
SubCategories2・上のカテゴリーリストより「ウェブログ」をクリックしてジャンプしたページで表示されるカテゴリーリストです。「ウェブログ」カテゴリーに関係するサブカテゴリーだけが表示されます。
SubCategories3・上のカテゴリーリストより「カスタマイズ」をクリックしてジャンプしたページで表示されるカテゴリーリストです。「カスタマイズ」カテゴリーに関係するサブカテゴリーだけが表示されます。
SubCategories4・上のカテゴリーリストより「折りたたみ」をクリックしてジャンプしたページで表示されるカテゴリーリストです。下位のカテゴリーが存在しないため何も表示されません。

上記の振る舞いは場合によっては使い道がありますが、サイドメニューとして相応しいかどうかは個人的に疑問があり、当サイトで公開中のテンプレートは以前のMTCategoriesを使ったメニュー表示にしています。

このエントリーではどのカテゴリーアーカイブページにジャンプしても、サンプルの一番上の画像のようなメニューが表示される方法を紹介します。なお日付アーカイブや個別アーカイブではページ自体に「カテゴリー」という概念がない(つまり先のタグがカテゴリーアーカイブ内のような振る舞いをしない)ので全カテゴリーが表示されます。

全カテゴリーを表示するには MTTopLevelCategories を用いることで実現できます。テンプレートの下記の赤色部分を青色に変更してください。

変更前
<div class="sidetitle">
Categories
</div>
 
<div class="side">
<div id="categories">
<MTSubCategories>
<MTSubCatIsFirst><ul></MTSubCatIsFirst>
<MTIfNonZero tag="MTCategoryCount">
<li><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>"><MTCategoryLabel></a> [<$MTCategoryCount$>]
<MTElse>
<li><MTCategoryLabel>
</MTElse>
</MTIfNonZero>
<MTSubCatsRecurse max_depth="3">
</li>
<MTSubCatIsLast></ul></MTSubCatIsLast>
</MTSubCategories>
</div>
</div>
変更後
<div class="sidetitle">
Categories
</div>
 
<div class="side">
<div id="categories">
<MTTopLevelCategories>
<MTSubCatIsFirst><ul></MTSubCatIsFirst>
<MTIfNonZero tag="MTCategoryCount">
<li><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>"><MTCategoryLabel></a> [<$MTCategoryCount$>]
<MTElse>
<li><MTCategoryLabel>
</MTElse>
</MTIfNonZero>
<MTSubCatsRecurse max_depth="3">
</li>
<MTSubCatIsLast></ul></MTSubCatIsLast>
</MTTopLevelCategories>
</div>
</div>

MTTopLevelCategories についてはMovable Type ユーザマニュアル: テンプレートタグで下記の説明があります。

MTTopLevelCategories
MTSubCategoriesのクローン。ただし、カテゴリー階層の最上位で常に開始します。

上記で全カテゴリーが表示されるようになりますが、カテゴリーリストを独立したインデックステンプレートとして割り充てる方法を併せてご紹介しておきます。これは巷で流行っている(?)「モジュール(部品)化」というものです。
インデックステンプレートはいわゆるメインページや他のアーカイブテンプレートと同じ位置付けで、保存・再構築することで独立したファイルを出力します。モジュール化のメリットはエントリーの再構築時間を短縮と、適用したアーカイブページで常に同じ内容が反映されることです。
以下、カスタマイズ方法です。

1.新しいインデックステンプレートを作成
管理メニューの「テンプレート」をクリックし、次ページの「インデックス・テンプレート」の右端にある「新しいインデックス・テンプレートを作る」をクリック。次ページの各項目に以下の内容を設定してください。

  • テンプレートの名前:カテゴリーリスト
  • 出力ファイル名:categorylist.html
  • このテンプレートにリンクするファイル:(無記入)
  • 再構築オプション:チェックをする
  • テンプレートの中身:下記をコピー&ペースト(緑色部分は2004.12.01修正箇所)
<div class="sidetitle">
Categories
</div>
 
<div class="side">
<div id="categories">
<MTTopLevelCategories>
<MTSubCatIsFirst><ul></MTSubCatIsFirst>
<MTIfNonZero tag="MTCategoryCount">
<li><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>"><MTCategoryLabel></a> [<$MTCategoryCount$>]
<MTElse>
<li><MTCategoryLabel>
</MTElse>
</MTIfNonZero>
<MTSubCatsRecurse max_depth="3">
</li>
<MTSubCatIsLast></ul></MTSubCatIsLast>
</MTTopLevelCategories>
</div>
</div>

ペーストする内容は公開テンプレート(スタイルシート)を前提にしたものです。異なるテンプレートを使用されている場合は div タグのクラス属性等を適宜修正してください。
修正が終わったら、保存・再構築してください。管理メニューの「ウェブログの設定」→「基本設定」で指定したローカル・サイト・パスに categorylist.html が配置されます。

2.カテゴリー・アーカイブテンプレートの修正
先の categorylist.html をインクルードするためにカテゴリー・アーカイブテンプレートの下記の赤色部分を青色部分に修正します(リストは公開テンプレートを例にしています)。

修正前
<div class="sidetitle">
Categories
</div>
 
<!-- 全カテゴリー用 -->
<div class="side">
<MTCategories>
<a href="<$MTCategoryArchiveLink$>">
<$MTCategoryLabel$></a>  [<$MTCategoryCount$>]<br />
</MTCategories>
</div>
<!-- 全カテゴリー用 -->
修正後
<$MTInclude file="categorylist.html"$>

categorylist.html が正常に読み込めない場合は上記のfile属性指定の部分をルートディレクトリからのフルパス指定に変更してください。
修正が終わったら保存・再構築してください。ここまでの作業が済めばカテゴリーアーカイブページのカテゴリーリストは全カテゴリーが表示されるようになっています。

3.他のアーカイブテンプレートの修正
カテゴリー・アーカイブテンプレートを除いた各テンプレートのカテゴリーリストを、MTCategories から MTSubCategories を用いたものに置き換えます。各テンプレートのカテゴリーリストを前記と同様の作業(MTIncludeタグへの変更)を行ってください。公開テンプレートをご利用の方は、下記のようにカテゴリーリストをコメントアウト(赤色部分を削除)し、コメントアウトされたサブカテゴリー部分を有効(青色部分を追加)にされてもOKです。

修正前
<!-- 全カテゴリー用 -->
<div class="side">
  :
</div>
<!-- 全カテゴリー用 -->
 
<!-- サブカテゴリー用
<div class="side">
<div id="categories">
  :
</div>
</div>
 サブカテゴリー用 -->
修正後
<!-- 全カテゴリー用
<div class="side">
  :
</div>
全カテゴリー用 -->
 
<!-- サブカテゴリー用  -->
<div class="side">
<div id="categories">
  :
</div>
</div>
<!-- サブカテゴリー用 -->

修正が終了したらそれぞれ保存・再構築してください。

作業は以上です。なお3.11-ja用公開テンプレートご利用の方はスタイルシートの設定に冗長な部分がございましたので、下記の赤色部分をばっさり削除してやってください。少なくとも一番下の margin-bottom? を削除しないとメニュー下の空白が相当とられてしまいます。

.side #categories {
        font-family: Verdana, Arial, sans-serif;
        color: #666666;
        background: none;
        font-size: 9px;
        font-weight:normal;
        line-height:150%;
        text-align: left;
        padding:2px;
        margin-bottom:25px;
}

2004.12.01 追記
全カテゴリー表示に MTTopLevelCategories タグを用いた方法がありましたので記述を一部修正致します。Note book :: Hibi no Note さんよりご指摘頂きました。ありがとうございました。

Comments [47] | Trackbacks [38]
Now loading...
ギターに入った猫
掲載広告募集
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

このブログをメールで購読する by:FeedBurner

AMN
Categories
Monthly Archives
2020年
2019年
2018年
2017年
2016年
2015年
2014年
2013年
2012年
2011年
2010年
2009年
2008年
2007年
2006年
2005年
2004年
2003年
BlogPeople
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
Powered by
Movable Type 6.0.3