# $Id: EntryCategoryLinks.pl,v 1.2 2003/03/07 16:19:21 akosut Exp $ # by Alexei Kosut use MT; use MT::Template::Context; use MT::Entry; use strict; use warnings; MT::Template::Context->add_container_tag(EntryPrimaryCategory => sub { my ($ctx, $args) = @_; my $entry = $ctx->stash('entry') or return $ctx->_no_entry_error('MTEntryPrimaryCategory'); my $builder = $ctx->stash('builder'); my $tokens = $ctx->stash('tokens'); unless ($entry->category) { return ""; } local $ctx->{__stash}{category} = $entry->category; my $out = $builder->build($ctx, $tokens); return $ctx->error( $builder->errstr ) unless defined $out; return $out; }); MT::Template::Context->add_container_tag(EntryNextInCategory => \&nextprev); MT::Template::Context->add_container_tag(EntryPrevInCategory => \&nextprev); sub nextprev { my ($ctx, $args) = @_; my $tag = $ctx->stash('tag'); my $entry = $ctx->stash('entry') or return $ctx->_no_entry_error("MT$tag"); my $cat = $ctx->stash('category') or return $ctx->error("MT$tag: No category in context."); my $is_next = ($ctx->stash('tag') =~ /Next/); my $builder = $ctx->stash('builder'); my $tokens = $ctx->stash('tokens'); my $adj = $entry; do { $adj = $is_next ? $adj->next : $adj->previous; } while ($adj && !$adj->is_in_category($cat)); if ($adj) { local $ctx->{__stash}->{entry} = $adj; local $ctx->{current_timestamp} = $adj->created_on; my $out = $builder->build($ctx, $tokens); return $ctx->error($builder->errstr) unless defined $out; return $out; } ''; }