Movable Type でカテゴリーの一覧を表示するときに、テンプレートタグに MTCategories タグを使うわけだが、表示される順番を変えたい場合が結構ある。
通常、順番はカテゴリー名を参照して表示されるが、その順番を変えたいことは良くある。
ちなみに、このブログは裏側でカテゴリー管理はしているけど表示はしていない。他での話。自分用の覚え書き。
順番を任意に変えたい
順番を任意に設定したいという要望は、僕以外にも結構あるようで、探せばいろんな方法が見つかる。
プラグインで並べ替えたり、カテゴリー名の頭にソート用の番号をつけて、表示するときに削除する方法。僕がよく使うのは後者なのだが、あまり手間をかけたくないし、プラグインも出来たら避けたいということで、次のような方法をとっている。
まず、カテゴリー名の頭に次のように番号を付けます。
<01>カテゴリー1 <02>カテゴリー2 <03>カテゴリー3 <04>カテゴリー4
そして、表示するときにカテゴリー名を表示するMTタグ MTCategoryLabel を表示するところをすべて、次のように変更する。
<$MTCategoryLabel$> ↓ <$MTCategoryLabel remove_html="1"$>
ただ、これだけ。
余計なプラグインなども不要なので便利。
remove_html="1" というのは、htmlソースを取り除くというモディファイアなのだが、数字を<>で挟むとHTMLソースと判断されて削除されるわけだ。
順番をソートする
今回、カテゴリーの順番を単純にソートして順番を逆にしたかった。上記のように番号を振っていってもいいのだが、任意に変えるにはテンプレートをいくつか修正しなきゃいけない。単純に逆にしたいだけなので、もっと簡単にやってしまいたかった。
MTSubCategories タグなどでは並べる順番を変えるモディファイアはあるのだが、なぜか MTCategories にはない。ただ、順番を逆にするだけなのだが。
そこで、いろいろ調べたけど、下記のような方法であれば、プラグインなどがなくても順番を逆にできそうだ。
<MTCategories>
<MTSetvarBlock name="catid"><$MTCategoryID$></MTSetvarBlock>
<MTSetvarBlock name="catlinkset">
<a href="<$MTCategoryArchiveLink$>"><$mt:CategoryLabel$></a>
<p><$mt:CategoryDescription$></p>
</MTSetvarBlock>
<MTSethashVar name="catlist">
<MTSetVar name="$catid" value="$catlinkset">
</MTSethashVar>
</MTCategories>
<MTLoop name="catlist" sort_by="key reverse">
<$mt:getvar name="__value__"$>
</MTLoop>
MTSetvarBlock で、カテゴリーのIDとカテゴリーを表示するHTMLを別々に読み込んで、MTLoop によって順番を reverse させて表示させるだけ。
これだけで出来ました。


コメントする