Category Sorting
- Date
- 2005-03-30 (Wed)
- Category
- MovableType
MovableType でカテゴリの順番をかえてくれと、クライアントからリクエストがあったので、ちょっと調べてみた。
まずは本家 MovableType のドキュメント…(Six Apart の情報デザイン、前も酷かったけど今はもっと酷いね)Category-Related Tags。なになに? MTCategories と MTSubCategories の違いは多機能かどうかってことね。ほどなく sort_method プロパティを発見。しかし
Please see the example for more details
とあるわりには、例とかネェじゃん。正直に言いますね。最初は日本の sixaprt が出してる日本語版を読んでました。まぁきっと日本の誰かが手を抜いたんだろうと思って、本家を当たり直しても結局一緒。何じゃこりゃ!
で、Google 先生にお伺いすると、殆ど同じ文面を発見。しかしリンク切れなので、キャッシュです。
SubCategories Plugin by David Raynes
この一緒っぷりだとおそらく Sixaprt が正規ファイルとして買収なり採用なりしたんでしょう。で、これには例がついてます。Perl は殆ど知らないので、いい加減に調整してやってみる。うまく行った。上の Google Cache が切れたらアレだから、以下の Extend に code を付けておきます。
しかし、MovableType のタグ構造はよくわからん。いや、わかりにくいし、ドキュメントが貧弱。
package GRF::catsorting;
my %category_priorities = (
# I want 'MT Plugins' to appear before 'MT Brainstorming'
# followed by the rest
'Trivia' => 1,
'School' => 2,
'Sticky Memo' => 4,
'Tech' => 3,
'diary' => 5,
# And I want 'SubCategories' to be the first plugin listed,
# followed by 'Entry' and then the rest of the plugins
'Web' => 2,
'MovableType' => 1
);
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) {
# At least one of them has a defined priority
# so sort on that
return $a_pri <=> $b_pri;
}
# Both are the default value (1000)
# so sort alphabetically
return $a->label cmp $b->label;
}
簡単に変えなきゃいけないとこだけ解説すると…
- 1行目:package...
- このスクリプトの置き場。 /mt/extlib/GRF/catsorting.pm としたので上のようになります。
- 5行目〜:’Trivia' =>...
- トップレヴェルカテゴリの順番。数字の小さい順に並びます。配列しての並び順は関係ない。
- 12行目〜:’Web' =>...
- 僕の場合、Tech に Web と MovableType というサブカテゴリのがあるのだけどそれは別に用意する。同じく数字の小さい順に並びます。
例えばトップレベルに3つあるんだったら、それは飛び飛びの番号じゃダメで、必ず 1〜3 の順位を付ける、と。っていうか下の cat_sort を理解すればなんでかわかるんだろうけど…わかんないんで、今日はピーコ厨です。
Comment:0
Trackback:0
- TrackBack URL for this entry
- http://blogs.grf-design.com/mt/mt-tb.cgi/65
- Listed below are links to weblogs that reference
- Category Sorting from The Croton