MovableType 3.1 以降に搭載されているサブカテゴリー機能は、元は David Raynes 氏の SubCategories プラグインを吸収したモノで、これまでのカテゴリー機能よりも便利になってますね。
<MTSubCategories> タグには sort_method というアトリビュートがありますが、詳しい解説は MovableType のマニュアルには書かれていません。元になった SubCategories プラグインのマニュアルにサンプルと簡単な説明があります。カテゴリーの並べ替えってのも今さら感がありますが、<pre> タグのテストを兼ねて書いておこうかなと。サンプルのまんまですけど。
まずはソートの動作を規定するメソッドを作ります。以下をコピペしてあとは必要に応じて書き換えれば OK 。
package CatSort;
my %category_priorities = (
'Entertainment' => 200,
'Movie' => 150,
'Miscellany' => 900,
'Foods' => 300,
'Music' => 120,
'Sports' => 140,
'Internet' => 100
);
sub cat_sort ($$) {
my ($a, $b) = @_;
my $a_pri = $category_priorities{$a->label} || 1000;
my $b_pri = $category_priorities{$b->label} || 1000;
unless ($a_pri == 1000 && $b_pri == 1000) {
return $a_pri <=> $b_pri;
}
return $a->label cmp $b->label;
}
1 行目はパッケージ指定。ここでは CatSort としました。'Entertainment' => 200, 以下でソートしたい順番に小さい順に数字を対応させていきます。サブルーチン cat_sort 内で指定されている 1000 という数まで使えます。これを 10000 にすると 4 桁まで使えますが、大きな数字にするとそれだけ処理が重くなるので要注意。逆に小さくすれば軽くなります。下位のカテゴリーをソートしたい場合もここに並べて書いていきます。
作ったファイルは extlib/CatSort.pm に保存。extlib/foobar/CatSort.pm というようにディレクトリに格納する場合は、1 行目のパッケージ名を package foobar::CatSort; とします。あとはソートしたいカテゴリーリストのコンテナタグに <MTSubCategories sort_method="CatSort::cat_sort"> と sort_method アトリビュートを加えるだけ。
これなら、作業自体はカテゴリー名の頭に数字を付けるのと大差ないですし、いろいろとプラグインを追加しなくてもいいのですが、カテゴリー増やしたときに更新しなきゃいけないのは、あまり手軽とは言えないですね。うまいこと sort_method を作ってやれば、投稿数の多いカテゴリー順に並べたりも出来そう。Perl 理解していないのでアレですが。
Comment