概要: 任意のプロパティでエントリをソートする
Plagger::Feed->title で昇順ソートとか、 Plagger::Feed->link で降順ソートとかしたかったため作ってみた。
package Plagger::Plugin::Filter::SortEntries;
use strict;
use warnings;
use base qw( Plagger::Plugin );
sub register {
my ( $self, $c ) = @_;
$c->register_hook(
$self,
'publish.feed' => $self->can('feed'),
);
}
sub feed {
my ( $self, $c, $args ) = @_;
my @entries = $args->{'feed'}->entries
or return;
my $key = $self->conf->{'key'}
or $c->log( error => "Config 'key' is not specified." ) and return;
@entries = sort { $a->$key cmp $b->$key } @entries;
@entries = reverse @entries if ( $self->conf->{'reverse'} );
$args->{'feed'}->{'entries'} = \@entries;
}
1;
__END__
ライセンスは Perl と同等で、設定はこんな感じ。
plugin:
- module: Filter::SortEntries
config:
key: title
reverse: 1
key
がソートをするためのキーを指定、reverse
が昇順か降順の指定。
reverse
が偽だと昇順、真だと降順になる。
SmartFeed をソートできるようにするため、publish.feed
で動作しているので、
ちょっと注意が必要。
Plagger::Feed 自体にエントリのソート機能はついてるんだけど、 ソート方法が固定だったので、作ってみた次第。
- [[Publihs::Template /post/50888701357]] とか [[Publihs::File /2007/05/05/1]] とかで使うために作ったものの、 あんまり使い道はないかも。
#FIXME