more sorting options for SyndicatedContent
This commit is contained in:
parent
2fe34a2a06
commit
40d11e8693
5 changed files with 207 additions and 47 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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' => {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue