# MTIndexEntries ($Id: MTIndexEntries.pl,v 1.3 2003/04/09 18:19:57 akosut Exp $) # by Alexei Kosut # Display all entries made in the last 7 days, always including at least # 5 entries: # # # ... # use MT; use MT::Template::Context; use MT::Template; use MT::Entry; use MT::Util qw(offset_time_list); use strict; use warnings; MT::Template::Context->add_container_tag(IndexEntries => sub { my ($ctx, $args, $cond) = @_; my $blog_id = $ctx->stash('blog_id'); my $lastn = $args->{'lastn'} or return $ctx->error('No lastn attribute'); my $days = $args->{'days'} or $ctx->stash('blog')->days_on_index; my %terms = ( blog_id => $blog_id, status => MT::Entry::RELEASE() ); my @lastn_entries = MT::Entry->load(\%terms, { sort => 'created_on', direction => 'descend', limit => $lastn }); my @ago = offset_time_list(time - 3600 * 24 * $days, $blog_id); my $ago = sprintf("%04d%02d%02d%02d%02d%02d", $ago[5]+1900, $ago[4]+1, @ago[3,2,1,0]); my @days_entries = MT::Entry->load({ %terms, created_on => [ $ago ] }, { range => { created_on => 1 } }); # uniq by id. my %entries; foreach my $entry (@lastn_entries, @days_entries) { $entries{$entry->id} = $entry; } my @entries = values %entries; # _hdlr_entries already has all the logic needed to actually display # the entries. Just stash the entries we want repeated and call # it with the arguments we care about. local $ctx->{__stash}{entries} = [ @entries ]; return MT::Template::Context::_hdlr_entries($ctx, { sort_by => $args->{sort_by}, sort_order => $args->{sort_order} }, $cond); });