looselife.net

MTSubCategories を使ってカテゴリーを好きな順番に並べる

Posted at 2005.06.02 (Thu) 23:31 +09:00 in the category "MovableType".

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 理解していないのでアレですが。

Trackback

カテゴリを任意の順に並び替える
Trackbacked at 2006.03.19 (Sun) 12:29 from "まけないこと投げ"
MTSubCategories sort_method=CatSort::cat_sort を用いてカテゴリを任意の順に並び替え。エラーが出たので修正してみた。
MTカテゴリーを任意の順番に並べ替える方法いろいろ
Trackbacked at 2006.08.31 (Thu) 05:09 from "WEBデザイン BLOG"
MTカスタマイズでカテゴリを任意で並べ替える方法にもいろいろとあります。そんな各種方法・使用プラグイン・コードなどをまとめて情報として残しておきます。
Trackback URL:

Comment

Post Comment
Remember ?