more sorting options for SyndicatedContent

This commit is contained in:
Paul Driver 2010-05-06 14:55:32 -07:00
parent 2fe34a2a06
commit 40d11e8693
5 changed files with 207 additions and 47 deletions

View file

@ -109,8 +109,17 @@ sub definition {
},
sortItems => {
tab => 'properties',
fieldType => 'yesNo',
defaultValue => 1,
fieldType => 'selectBox',
options => do {
tie my %o, 'Tie::IxHash', (
none => $i18n->get('no order'),
feed => $i18n->get('feed order'),
pubDate_asc => $i18n->get('publication date ascending'),
pubDate_des =>
$i18n->get('publication date descending'),
); \%o;
},
defaultValue => 'none',
label => $i18n->get('sortItemsLabel'),
hoverHelp => $i18n->get('sortItemsLabel description'),
},
@ -136,10 +145,13 @@ Combines all feeds into a single XML::FeedPP object.
=cut
sub generateFeed {
my $self = shift;
my $self = shift;
my $limit = shift || $self->get('maxHeadlines');
my $feed = XML::FeedPP::Atom->new();
my $log = $self->session->log;
my $log = $self->session->log;
my $sort = $self->get('sortItems');
my @opt = (use_ixhash => 1) if $sort eq 'feed';
my $feed = XML::FeedPP::Atom->new(@opt);
# build one feed out of many
my $newlyCached = 0;
@ -160,7 +172,7 @@ sub generateFeed {
# care of any encoding specified in the XML prolog
utf8::downgrade($value, 1);
eval {
my $singleFeed = XML::FeedPP->new($value, utf8_flag => 1, -type => 'string');
my $singleFeed = XML::FeedPP->new($value, utf8_flag => 1, -type => 'string', @opt);
$feed->merge_channel($singleFeed);
$feed->merge_item($singleFeed);
};
@ -192,9 +204,14 @@ sub generateFeed {
}
# sort them by date and remove any duplicate from the OR based term matching above
if ($self->get('sortItems')) {
if ($sort =~ /^pubDate/) {
$feed->sort_item();
}
if ($sort =~ /_asc$/) {
my @items = $feed->get_item;
$feed->clear_item;
$feed->add_item($_) for (reverse @items);
}
# limit the feed to the maximum number of headlines (or the feed generator limit).
$feed->limit_item($limit);

View file

@ -245,11 +245,33 @@ our $I18N = {
},
'sortItemsLabel' => {
message => q{Sort feed items by date?},
message => q{Sort items by},
},
'sortItemsLabel description' => {
message => q{If enabled, items will be sorted by date. If disabled, items will be left in the order they appear in the original feed.},
message => q{No order: items will be in semi-random order<br />
Publication Date: sort by item pubDate<br />
Feed Order: Items will be in the order they appeared in the feed}
},
'no order' => {
message => 'No Order',
context => 'name for the sortItems value that indicates that no sorting should be done '
},
'feed order' => {
message => 'Feed Order',
context => 'name for the sortItems value that indicates items should be in the order they appeared in the feed'
},
'publication date ascending' => {
message => 'Publication Date (oldest first)',
context => 'name for the sortItems value that indicates items should be sorted by publication date from oldest to newest'
},
'publication date descending' => {
message => 'Publication Date (newest first)',
context => 'name for the sortItems value that indicates items should be sorted by publication date from newest to oldest'
},
'syndicated content asset template variables title' => {