12-12 sort_methodモディファイアによるカテゴリとフォルダのソート
246 ページ:カテゴリIDでソート
昇順にソート
sort_method="{ $a->id <=> $b->id }"
降順にソート
sort_method="{ $b->id <=> $a->id }"
カテゴリ名でソート
昇順にソート
sort_method="{ $a->label cmp $b->label }"
降順にソート
sort_method="{ $b->label cmp $a->label }"
半角英文字の大文字・小文字を区別しないで昇順にソート
sort_method="{ lc($a->label) cmp lc($b->label) }"
半角英文字の大文字・小文字を区別しないで降順にソート
sort_method="{ lc($b->label) cmp lc($a->label) }"
247 ページ:カテゴリの説明でソート
昇順にソート
sort_method="{ $a->description cmp $b->description }"
降順にソート
sort_method="{ $b->description cmp $a->description }"
半角英文字の大文字・小文字を区別しないで昇順にソート
sort_method="{ lc($a->description) cmp lc($b->description) }"
半角英文字の大文字・小文字を区別しないで降順にソート
sort_method="{ lc($b->description) cmp lc($a->description) }"
カテゴリのベースネームでソート
昇順にソート
sort_method="{ $a->basename cmp $b->basename }"
降順にソート
sort_method="{ $b->basename cmp $a->basename }"
半角英文字の大文字・小文字を区別しないで昇順にソート
sort_method="{ lc($a->basename) cmp lc($b->basename) }"
半角英文字の大文字・小文字を区別しないで降順にソート
sort_method="{ lc($b->basename) cmp lc($a->basename) }"
config.yaml
name: CategorySorter
id: CategorySorter
CategorySorter.pm
package CategorySorter;
use strict;
sub by_entry_count ($$) {
($a, $b) = @_;
my $a_count = _get_entry_count($a);
my $b_count = _get_entry_count($b);
$a_count <=> $n_count;
}
sub by_entry_count_r ($$) {
($a, $b) = @_;
my $a_count = _get_entry_count($a);
my $b_count = _get_entry_count($b);
$b_count <=> $a_count;
}
sub _get_entry_count {
my $category = shift;
my ($terms, $args);
$terms->{ status } = MT::Entry::RELEASE();
$args->{ join } = MT::Placement->join_on(
'entry_id',
{ 'category_id' => $category->id });
MT::Entry->count( $terms, $args ) || 0;
}
1;
248 ページ
ブログ記事数で昇順にソート
sort_method="CategorySorter::by_entry_count"
ブログ記事数で降順にソート
sort_method="CategorySorter::by_entry_count_r"
CategorySorter.pm
package CategorySorter;
use strict;
sub by_entry_modified ($$) {
($a, $b) = @_;
my $a_entry = _get_entry_modified($a);
my $b_entry = _get_entry_modified($b);
return 0 unless (defined($a_entry) || defined($b_entry));
return 1 unless (defined($a_entry));
return -1 unless (defined($b_entry));
$b_entry->modified_on <=> $a_entry->modified_on;
}
sub _get_entry_modified {
my $category = shift;
my ($terms, $args);
$terms->{ status } = MT::Entry::RELEASE();
$args->{ join } = MT::Placement->join_on(
'entry_id',
{ 'category_id' => $category->id });
$args->{ sort } = 'modified_on';
$args->{ direction } = 'descend';
$args->{ limit } = 1;
MT::Entry->load( $terms, $args );
}
1;
249ページ
ブログ記事の更新日時でソート(初版はリストタイトルが誤っています)
sort_method="CategorySorter::by_entry_modified"
CategorySorter.pm
package CategorySorter;
use strict;
my %priorities = (
'cat2' => 1,
'cat4' => 2,
'cat5' => 3,
'cat1' => 4,
'cat3' => 5,
);
sub by_basename_priorities ($$) {
($a, $b) = @_;
my $a_priority = _get_priority($a);
my $b_priority = _get_priority($b);
unless ($a_priority == 1000 && $b_priority == 1000) {
return $a_priority <=> $b_priority;
}
$a->basename cmp $b->basename;
}
sub by_basename_priorities_r ($$) {
($a, $b) = @_;
my $a_priority = _get_priority($a);
my $b_priority = _get_priority($b);
unless ($a_priority == 1000 && $b_priority == 1000) {
return $b_priority <=> $a_priority;
}
$b->basename cmp $a->basename;
}
sub _get_priority {
my $category = shift;
$priorities{ $category->basename } || 1000;
}
1;
250ページ
昇順にソート
sort_method="CategorySorter::by_basename_priorities"
降順にソート
sort_method="CategorySorter::by_basename_priorities_r"
CategorySorter.pm
package CategorySorter;
use strict;
my %priorities = (
'パソコン' => 1,
'家電' => 2,
'カメラ' => 3,
'ゲーム' => 4,
'楽器' => 5,
);
sub by_label_priorities ($$) {
($a, $b) = @_;
my $a_priority = _get_priority($a);
my $b_priority = _get_priority($b);
unless ($a_priority == 1000 && $b_priority == 1000) {
return $a_priority <=> $b_priority;
}
$a->label cmp $b->label;
}
sub by_label_priorities_r ($$) {
($a, $b) = @_;
my $a_priority = _get_priority($a);
my $b_priority = _get_priority($b);
unless ($a_priority == 1000 && $b_priority == 1000) {
return $b_priority <=> $a_priority;
}
$b->label cmp $a->label;
}
sub _get_priority {
my $category = shift;
$priorities{ Encode::encode_utf8($category->label) } || 1000;
}
1;
251ページ
昇順にソート
sort_method="CategorySorter::by_label_priorities"
降順にソート
sort_method="CategorySorter::by_label_priorities_r"