MTにサブカテゴリー

以前からMovableTypeのカテゴリーを階層構造にしたいと考えてましたんで、これを実現するプラグインを早速組み込んでみました。

まず、David Raynes氏のSubCategoriesプラグインを(感謝を捧げてから)頂いて来て、解凍します。

2004年5月現在、SubCategoriesプラグインのバージョンは0.4です。

プラグイン本体であるsub_cats.plはプラグインフォルダ(例えば/mt/plugins)にアップロードするだけ。サブカテゴリの管理ツールmt-sc.cgiは、mt.cgiと同じフォルダ(例えば/mt)にアップロードし、755等の実行可能属性を付けます。

準備は以上で終わり。

mt-sc.cgiはMTの設定を変更するツールなんで、同じフォルダの.htaccessに

<Files mt-sc.cgi>
AuthUserFile /home/yas_/.htpasswd
AuthGroupFile /dev/null
AuthName "ひ み つ だ よ"
AuthType Basic
require valid-user
</Files>

↑こんな記述を入れておく方がたぶん無難だろうとは思います。.htaccessについての詳細はミケネコの htaccess リファレンスさん(いつもお世話になってます)等を参照してください。

2バイト文字名のblog下でmt-sc.cgiにアクセスすると

031006a.gif

いきなり↑こんな表示が出て愕然としますが、単に出力がISOエンコードされてるだけなんで、適切なエンコード(ココだとEUC)に変更してやります。

031006c.gif

その後、

031006b.gif

「左のカテゴリー」は、「右のカテゴリーの親」

と設定するだけで、カテゴリーの親子関係を指定する事が出来ました。つまり、MTで普通にカテゴリを作成し、その後mt-sc.cgiで「このカテゴリはこのカテゴリのサブ(子)カテゴリー」と設定するだけ。

テンプレートのカテゴリーリスト表示は、従来との整合性を保つ意味もありこんな感じに。

<MTSubCategories show_empty="0">
<MTSubCatIsFirst><ul></MTSubCatIsFirst>
<li>
<a href="<$MTCategoryArchiveLink$>"><$MTCategoryLabel$></a> (<$MTCategoryCount$>)<br>
<MTSubCatsRecurse>
</li>
<MTSubCatIsLast></ul></MTSubCatIsLast>
</MTSubCategories>

「サブカテゴリにはエントリーがあるけど親カテゴリーにはない」状況が十分に考えられるため、show_emptyを0にセットしてます。お陰でエントリー0の隠しカテゴリが露出しちゃう副作用が出るんですが、まぁこれは仕方ないでしょう(^_^;)

一見して解る通りULでメニューを階層化してる→標準スタイルのままだとULのインデントが深すぎてメニューの表示がえらく右に寄っちゃうんで、スタイルシートに

.side UL{
margin-left:1em;
margin-top:0em;
}

と記述し、side中のULではインデント1文字分、上部マージンを0として対処しました。

ついでにULのドット表示を取っ払ったりもしてみたんすが、なんだか見づらくなっちゃったのでリストの接頭記号についてはとりあえず標準のまま。


結局、「階層型のカテゴリメニュー」ってのが他の要素と折り合いが良くなく、検討の結果サブカテゴリプラグインを外しちゃいました。

基本的にMTは並列カテゴリ構造を前提に設計されており、「階層型カテゴリ構造」とはあまり相性が良くないみたいです。サブカテゴリプラグインは「かなり無理矢理」で、「サブカテゴリプラグイン内でしか階層構造を表現出来ない」という弱点もあるので。