主/副カテゴリーを区別して出力する

Movable Typeでは、1つのエントリーを複数のカテゴリーに割り当てることができます。
また、そのうち1つを主カテゴリーにし、残りは副カテゴリーにすることもできます(主カテゴリーをなしにして、全部を副カテゴリーにすることもできます)。

しかし、Movable Typeの標準のテンプレートタグでは、主カテゴリーと副カテゴリーを区別して出力するものがありません。
MTEntryCategoryタグを使うと、主カテゴリーの名前(ラベル)を出力することができますが、その他の情報は出力できません。
また、MTEntryCategoriesタグを使うと、エントリーの全カテゴリーが文字コード順に出力され、主/副を区別することができません。

そこで、主カテゴリーと副カテゴリーを区別して出力するようなプラグインを作ってみました。

インストール

以下のページに接続して、表示されたソースコードをすべてコピーし、メモ帳等に貼り付けます。
そして、ソースコードに「EntryCategoriesModified.pl」というファイル名をつけて保存し、Movable Typeの「plugins」フォルダにアップロードします。

プラグインのソース

プラグインの継続的な開発やサポートのために、プラグインをご利用された方は、ドネーション(寄付)を行っていただけると幸いです。
ドネーションの方法は、こちらのページをご参照ください。

また、このプラグインの他にも、いくつかのプラグインを配布しています。
配布中のプラグインは、Movable Type Plugin Directoryのページをご参照ください。

Movable Typeのプラグイン開発等のドキュメント「Movable Type Developer's Guide Volume 1」も販売しています。
ご自分でプラグインを作ってみたい方に、ぜひお勧めしたい一冊です。
詳細は特設ページをご覧ください。

MTEntryCategoriesModifiedタグ

MTEntryCategoriesModifiedタグはMTEntryCategoriesタグを改良したものです。
コンテナタグになっていて、コンテナの中ではMTCategoryXXXタグを使うことができます。
「mode="xxx"」のアトリビュートを指定することで、以下の表のように、エントリーに割り当てたカテゴリーを出力することができます。

アトリビュート動作
mode="primary"主カテゴリーだけを出力します
mode="secondary"副カテゴリーだけを出力します
mode="all"まず主カテゴリーを出力し、その後に副カテゴリーを出力します

また、MTEntryCategoriesタグと同じく、「glue="○"」のアトリビュートで、カテゴリー間を区切る文字を指定することもできます。

MTEntryCategoryCountタグ

エントリーに割り当てたカテゴリーの数(主/副の合計)を出力する変数タグです。
また、「secondary="1"」のアトリビュートをつけると、副カテゴリーの数だけを出力することもできます。

MTEntryIfPrimaryCategoryタグ

エントリーに主カテゴリーがあるかどうかを判断する条件タグです。

MTEntryIfSecondaryCategoryタグ

エントリーに副カテゴリーがあるかどうかを判断する条件タグです。

使用例

以下のリストは、エントリーのカテゴリーを主カテゴリーと副カテゴリーに分けて出力する例です。
カテゴリーの名前を出力し、その部分をカテゴリーアーカイブページへのリンクにします。
また、副カテゴリーが複数ある場合は、それらの間をコンマで区切ります。

<p>
<MTEntryIfPrimaryCategory>主カテゴリー:<MTEntryCategoriesModified mode="primary"><a href="<$MTCategoryArchiveLink$>"><$MTCategoryLabel$></a></MTEntryCategoriesModified><br /></MTEntryIfPrimaryCategory>
<MTEntryIfSecondaryCategory>副カテゴリー(<$MTEntryCategoryCount secondary="1"$>):<MTEntryCategoriesModified mode="secondary" glue=" , "><a href="<$MTCategoryArchiveLink$>"><$MTCategoryLabel$></a></MTEntryCategoriesModified></MTEntryIfSecondaryCategory>
</p>