RSS Twitter Facebook
g200kg > MovableType Tips > 2.カテゴリ毎にデザインを変える

MovableType Tips

2008/04/02

2.カテゴリ毎にデザインを変える



エントリのカテゴリ毎やウェブページのフォルダ毎にデザインを変えたいというのは割合基本的な要求のような気がするが、MovableType3.1の頃はそれができる環境が整備されていなかったので、プラグイン入れたり結構苦労していたのだ。4.1の今なら、標準のタグだけでいける。

ブログエントリなら、MTIfCategory name="xxx" あるいは MTIfIsDescendant parent="xxx" で、ウェブページならMTIfFolder name="xxx" で場合を切り分けてテンプレートを複数作ればいいのだ。下で紹介しているプラグインを使う方法に比べて


  • MTElseがちゃんと動く

  • 正規表現が使えない


という違いがある。正規表現で複雑な切り分けをしたい場合はちと辛いが工夫の方法としてはカテゴリの親子関係をうまく作って MTIfIsDescendant で分けるのが一般的だろう。どうしてもそれだけではうまくいかない場合は

<MTSetVarBlock name="cate"><$MTCategoryLabel$></MTSetVarBlock>

で変数にカテゴリ名を入れて

<MTIf name="cate" like="xxx">

でカテゴリ名にxxxが含まれるかどうかの判定ができる。これで大抵の用は足りると思う。
ここで、カテゴリの名前の付け方について・・・
もともとサブカテゴリという概念がなかった所に後から持ち込んだものだから(かどうかは知らんがそんな気がする)MTではサブカテゴリといいつつ純粋に階層化はできずそれぞれの名前が完全にユニークでないといけない。フォルダも同じ。例えば、日記とニュースをそれぞれ日本語と英語で作ろうとして

jp の下に diary とnews
en の下に diary とnews

なんてやろうとしても"diary"と"news"というカテゴリはjpの下に作った時点でenの下には作れなくなるのだ。しょうがないので diary と e_diary とかやる事になる。数が少なきゃかぶらないように気を付けながらやればいいのだが、おすすめの方法は


  • _jp_

    • _jp_diary_

    • _jp_news_

  • _en_

    • _en_diary_

    • _en_news_



という感じで前後と区切りに "_" みたいなのを入れながら作る事だ。というのは、上の例で言うと、英語の記事だけ集めたい時は <MTIfIsDescendant parent="en">で親を判定すればいいとしても、diaryだけ集めたいという時困ったりする。

_en_ みたいに各部を分離して繋げておく事で "en" だけとか "diary" だけとかの判定を、変数にいれたカテゴリ名に対して
<MTIf name="cate" like="_en_"> とか <MTIf name="cate" like="_diary_">みたいに安全に判定できるのだ。まあ、この構造ならそもそも jp とか enとかいう親カテゴリそのものが必要なくてフラットに並んでるだけでもいいんだけどね。このあたりが、MTのサブカテゴリという奴がいまいち使えない奴だという感じがするもとなのだなぁ・・・。

以下は3.1の時の方法だ。(正規表現をフルに使うのなら今でも意味はあると思うが、そもそもこのプラグインがMT4でちゃんと動くのかどうか試していない。というかMTIfCategoryってタグ名が標準のものとかぶっている時点で致命的かも)



MovableTypeを導入してテンプレートのいじり方に慣れてくると
Blogを書くためだけに使うのはもったいないような気がしてくる。

これだけカスタマイズできるのだから、他のタイプのコンテンツの
作成もこれで出来るんじゃないかと思って色々といじくりまわす
事になるわけです。

まず最初にやる事は記事にカテゴリがつけられるのだから、
カテゴリ毎にレイアウトを変えるとかできればいろいろ応用が
できるぞ、と思うわけですが、それってどうやるのだ? という
所が最初の壁なわけです。

で、こういう話になるとでてくるのが、
bradchoate氏のSupplemental Category Tagsなわけです。このプラグインを
MTに追加してやると MTIfCategory/MTIfNotCategoryというタグが
使えるようになります。これがあれば記事のカテゴリ毎に分岐できる
のでテンプレートをカテゴリ毎に切り替えられるようになります。 
しかしこういう機能は標準装備しても良かったんじゃないかという気もする。

<MTIfCategory name="AAA">
カテゴリAAA用のタグ
</MTIfCategory>
<MTIfCategory name="BBB">
カテゴリBBB用のタグ
</MTIfCategory>

て感じです。
MT-Regex という奴と一緒に入れれば、正規表現も使えます。
ところでこいつ、MTの条件タグ内で条件を反転するために普通使える
が動かないようです。ありゃ、困った。と思ったら、
MTIfNotCategoryを使えば良いわけですな。このためにNotバージョンが
準備されているのかどうかは良く知らんが・・・。




g200kg