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

エントリーのない親カテゴリーに子カテゴリーを表示する

Movable Type 3.3 でエントリーのない親カテゴリーをアーカイブとして生成し、そこに子カテゴリーを表示するためのカスタマイズです。

Movable Type のカテゴリーアーカイブでは、自カテゴリーでエントリーがひとつも公開されていない場合、そのカテゴリーに子カテゴリーがある場合でも、自カテゴリーのアーカイブを生成することができません。言い換えると、エントリーのない親カテゴリーでの MTEntriesWithSubCategories タグは有効にならない、ということです。

本エントリーでは、下記の方法で親カテゴリーに子カテゴリーを表示する解決案を示してみたいと思います。

  • 親カテゴリーにダミーのエントリーを作る
  • メインページ、各アーカイブページで親カテゴリーのエントリーを表示しない設定をする
  • サイドバーのエントリーリストがある場合も親カテゴリーのエントリーを表示しない設定をする

ただし、エントリーアーカイブの前後のエントリーへのリンクについては親カテゴリーが表示されてしまいますので、ここではそのリンクがないページ構造であることを前提にします。
また実験では親-子カテゴリーまでの動作しか確認しておりません(子カテゴリーに対しさらに子カテゴリーがある場合の動作は未確認です)ので、予めご了承ください。

1.MTEntries タグの変更(カテゴリーアーカイブ)

カテゴリーアーカイブの MTEntries タグ(リスト1.1)をリスト1.2 のタグに変更します。

リスト1.1 カテゴリーアーカイブ(変更前)

<MTEntries>
   :
[通常のMTタグ]
   :
</MTEntries>

リスト1.2 カテゴリーアーカイブ(変更後)

<MTEntriesWithSubCategories>
<MTIfCategory name="[除外したいカテゴリー]">
<MTElse>
   :
[通常のMTタグ]
   :
</MTElse>
</MTIfCategory>
</MTEntriesWithSubCategories>

変更後の設定は、MTEntriesWithSubCategories タグでサブカテゴリーのエントリーも表示し、MTIfCategory タグで name 属性に記述されたカテゴリー、つまり親カテゴリーであれば何もしない(その他のカテゴリーであれば通常通り表示)という意味です。

たとえば、foo という親カテゴリーを除外したい場合は MTIfCategory タグの name 属性を

リスト1.3 name 属性設定例

<MTIfCategory name="foo">

とします。カテゴリー名は日本語でも大丈夫です。

除外したいカテゴリーが複数存在する場合、たとえば "foo" と "bar" という二つのカテゴリーを除外したい場合は、MTIfCategory タグを追加(リスト1.4の青色部分)して、

リスト1.4 複数のカテゴリーを除外する方法

<MTEntriesWithSubCategories>
<MTIfCategory name="foo">
<MTElse>
<MTIfCategory name="bar">
<MTElse>
   :
[通常のMTタグ]
   :
</MTElse>
</MTIfCategory>
</MTElse>
</MTIfCategory>
</MTEntriesWithSubCategories>

としてください。

2.MTEntries タグの変更(メインページ・日付アーカイブ・サイドバーの「最近のエントリー」等)

メインページ(アーカイブページも利用していれば含む)・日付アーカイブ・サイドバー等の MTEntries タグをリスト3.1 からリスト3.2 の内容に変更します。

リスト3.1 メインページ・日付アーカイブ・サイドバー(変更前)

<MTEntries>
   :
[通常のMTタグ]
   :
</MTEntries>

リスト3.2 メインページ・日付アーカイブ・サイドバー(変更後)

<MTEntries category_name="NOT [除外したいカテゴリー]">
   :
[通常のMTタグ]
   :
</MTEntries>

たとえば、foo という親カテゴリーを除外したい場合は MTEntries タグの category_name 属性を

リスト3.3 category 属性設定例1

<MTEntries category="NOT foo">

とします。カテゴリー名は日本語でも大丈夫です。

除外したいカテゴリーが複数存在する場合、たとえば "foo" と "bar" という二つのカテゴリーを除外したい場合は OR で区切り、さらにカッコで括って、

リスト3.4 category 属性設定例2

<MTEntries category="NOT (foo OR bar)">

としてください。

3.親カテゴリーにダミーエントリーをひとつ作る

カスタマイズは3項までで完了です。あとは子カテゴリーを表示したい親カテゴリーにエントリーをひとつ作成して「公開」で保存してください。

これで子カテゴリーのエントリーを書いて再構築を実行し、各ページでの表示を確認してください。

2006.11.10 追記
Ogawa::memoranda さんのアドバイスを受けて、カスタマイズ内容を修正しました(パッチの削除&MTIfCategory タグの記述変更)。

Comments [9] | Trackbacks [1]
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