アファメーションで独立・起業・夢実現。「いきなり!社長宣言!!」-“夢は口に出すことで実現する!”というアファメーション:ライブラリー

2007年8月31日

MovableType(ムーバブルタイプ)でカテゴリー周りをカスタマイズする。

夢実現のアファメーションを実践する起業家にもっとも読まれているブログは?

今更ながらMT3.3のカスタマイズの備忘録。

MovableType(ムーバブルタイプ)もVer.4が出て、時間がたつにつれて徐々にリソースがネットでも探せるようになってきました。
この「いきなり社長宣言」も、微力ながら多少役に立っている…まだまだっすね。
日々精進いたしやす。(汗)

んが。

いまだに過去のバージョンのMTをいじることもあるので、今回は今更ながらMT3.3のカスタマイズの備忘録。

特に、カテゴリー周りをちょろっと。

カテゴリーを任意の順番でソートする。

MovableType(ムーバブルタイプ)でカテゴリーを任意の順番で並べたい場合、いくつか方法がある。

例えば、MTCategoryDescriptionに日本語表記(ex.お知らせ)のカテゴリー名を入れて、MTCategoryLabelを数字を手前に持った英語名(ex.0010news)にして、使用する箇所を入れ替える方法。
メリットは、別段プラグインを入れなくても、テンプレートをいじるだけで出来てしまうのでお手軽。
デメリットは、それぞれのMTタグを本来の使い方とは違う使い方をするので、ちょっと気持ちが悪い。
(MTCategoryDescriptionは本来そのカテゴリーの説明文を表示させるためのもの。)

上記の気持ち悪さを回避するには、やはりプラグインを使うしかない。

有名なものでは、

って感じ。
どちらも、基本的にはカテゴリーの頭に数字をつけて、それによって順番を決め、プラグインの機能で頭の数字(または文字列)を置き換えたり削除したりする…という方法。

また、cutfirstchar.pl作者のH.Fujimoto氏は、いくつか別の方法でのソート用プラグインを作っている。

また、ちょっと変わった方法で、並べ替え用の定義ファイルを作って、

というのもあるみたい。

まぁ、どれも一長一短で、作るサイトや必要な機能によって、どの方法を取るかが変わってくる感じっすね。

後からプラグインを導入するのであれば、H.Fujimoto氏のカテゴリーの並べ替え・改良版がよさげなんだけど、今回は新規作成&別のプラグインを使って、任意のカテゴリーを表示・非表示にするということをしたかったので、同じくH.Fujimoto氏のcutfirstchar.plを使うことに。

んで、何をやりたいかというと、

まずカテゴリーを任意の順番でソート。
これはカテゴリーに「001000お知らせ」「002000カリキュラム」などと、数字をつけて、これによってソートして、cutfirstchar.plによって手前の数字部分(6文字)を削除する。
具体的には、<MTCategoryLabel cutfirstchar="6">と属性を追加するだけ。(チョー簡単!)

んで、MT3.3はカテゴリーの出力ファイル名(ディレクトリ)を任意に指定できるので、それを「news」や「curriculum」と明示的に指定すればOK。

んで、次は、任意のカテゴリーを表示、または非表示にする。
これは、FilterCategoriesというプラグインで実現可能。
※特定のカテゴリーの「エントリーの表示・非表示」であれば、「category=""」という属性の「OR AND NOT」で対応できるみたいだけど、カテゴリーそのものを表示・非表示ができなかった(もしかしたら、やり方が間違っていたのかも。)ので、こちらのプラグインを使おうかと。

FilterCategoriesを入れると、<MTFilterCategories>タグが使えるようになり、特定のカテゴリーを表示したい場合「include="カテゴリ1|カテゴリ2"」と指定し、逆に特定のカテゴリーを非表示にしたい場合は「exclude="カテゴリ1|カテゴリ2"」とすればよい。
(複数指定する場合は、上記のように「|」で区切る。)
※H.Fjimoto氏の「カテゴリーの並べ替え・改良版」では、「数字|出力ファイル名|カテゴリー名」の区切りを、同じく「|」で区切るので、このプラグインの仕様とかぶってしまって使えないっぽい。

それぞれのリストタグに、任意のクラス名を自動でつけるには?

そもそも、MTをブログとして使用して、カテゴリー部分(メニュー)をテキストで作るのであれば、このふたつで十分OK。

けれども、今回はMTをCMSとして使って、さらにメニュー部分を、背景画像のリプレイス(text-indentする方法)して、見た目を変えたかったので、それぞれのリストにカテゴリーごとのクラス名を挿入する必要が。(SEO的には微妙らしいですけど。)

クラス名は、当然半角英数でなければならないので、MTCategoryLabelは日本語を含んでいるので使えない。
かといって、旧来のようにプラグインを使わない方法のときのように、MTCategoryDescriptionに英語を入れてクラス名に…というのは、やっぱり使い方としては間違っている(っつか、そうするんだったら、いちいちプラグイン使わないでタグの入れ替えだけでいいし。)ので、どうしよっかなーと。

最初はcutfirstchar.plを使って、<$MTCategoryArchiveLink$>で吐き出されたURL部分を削除しようかと思ったけど、そうするとカテゴリーのディレクトリを区切る「/」が後ろに残ってしまう。
(例:http://hoge.com/news/だったら、手前の「http://hoge.com/」は削除できるけど、残った文字は「news/」となり、不要な「/」が残ってしまう。)

うむぅ。

っと、小一時間悩んだところでMTのリファレンスを見たら一発で解決。

そもそも、3.3からは、カテゴリーの出力ファイル名(ディレクトリ)を指定することが出来るわけで、とうぜんそれを参照するタグってのもあったみたいです。(最初からリファレンスを見ればよかった。汗)

<MTSubCategoryPath>というもので、その名の通りカテゴリーのパス(というかディレクトリ名)を参照するためのものです。
この<MTSubCategoryPath>を、クラス名に指定すれば、それぞれのカテゴリーを表示するリストタグに、任意のクラス名を自動的に割り振ることができるようになりまっす!(いやー、楽チン楽チン。)

まとめとしては、

  1. カテゴリー名を、「数字+日本語カテゴリー名」で作成。
  2. cutfirstchar="削除したい文字数">で、数字部分を削除。
  3. MTFilterCategoriesのincludeまたはexcludeで、任意のカテゴリーの表示・非表示を指定。
  4. class="<MTSubCategoryPath>"で、クラス名を指定。
  5. CSSで任意のデザインに変更する

って感じになりました。

今回、実際にカスタマイズしたソースは以下の通り。

<MTTopLevelCategories>
<MTSubCatIsFirst>
<ul>
</MTSubCatIsFirst>
<MTFilterCategories exclude="009000ほげ|010000ほげ|011000ほげ|012000ほげ|013000ほげ">
<MTIfNonZero tag="MTCategoryCount">
<li class="<MTSubCategoryPath>">
<a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>">
<MTCategoryLabel cutfirstchar="6"></a>
<MTElse>
<li class="<MTSubCategoryPath>"><MTCategoryLabel cutfirstchar="6">
</MTElse>
</MTIfNonZero>
<MTSubCatsRecurse>
</li>
</MTFilterCategories>
<MTSubCatIsLast>
</ul>
</MTSubCatIsLast>
</MTTopLevelCategories>

ご参考までに。

この記事に関連する(かもしれない)書籍

 

投稿者 kuro : 2007年8月31日 07:39 | ID:721

ページトップ△

ページトップ△