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"

このアーカイブについて

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。