#!/usr/bin/perl ### # # $Id: otherblog.pl,v 1.4 2003/01/06 17:44:12 rayners Exp $ # # MTOtherBLog, version 0.25 by David Raynes # ### use strict; use MT::Template::Context; MT::Template::Context->add_container_tag (OtherBlog => sub { my ($ctx, $args, $cond) = @_; my $blog_id = $args->{blog_id}; my $blog_name = $args->{blog_name}; my $excl_id = ($args->{exclude_current} ? $ctx->stash ('blog')->id : $args->{exclude_blog_id}); my $excl_name = $args->{exclude_blog_name}; unless (defined ($blog_id) || defined ($blog_name) || defined ($excl_id) || defined ($excl_name)) { return $ctx->error (MT->translate( "MTOtherBlog requires either blog_id or blog_name")); } require MT::Blog; my @blogs; if (defined ($blog_id)) { my @ids = split (",", $blog_id); foreach my $id (@ids) { my $blog = MT::Blog->load ($id) or return $ctx->error (MT->translate( "Error loading blog_id '[_1]': [_2]", $id, MT::Blog->errstr)); push @blogs, $blog; } } elsif (defined ($blog_name)) { my @names = split (",", $blog_name); foreach my $name (@names) { my $blog = MT::Blog->load ({ name => $name }) or return $ctx->error (MT->translate( "Error loading blog_name '[_1]': [_2]", $name, MT::Blog->errstr)); push @blogs, $blog; } } else { my @ids; my @names; @ids = split (",", $excl_id) if $excl_id; @names = split (",", $excl_name) if defined $excl_name; my @total = (@ids, @names); my %exclude; foreach (@total) { $exclude{$_}++; } require MT::Blog; my $iter = MT::Blog->load_iter (); while (my $blog = $iter->()) { next if (exists ($exclude{$blog->id}) || exists ($exclude{$blog->name})); push @blogs, $blog; } } my $builder = $ctx->stash ('builder'); my $tokens = $ctx->stash ('tokens'); my $res; foreach my $blog (@blogs) { local $ctx->{__stash}{blog} = $blog; local $ctx->{__stash}{blog_id} = $blog->id; defined (my $out = $builder->build ($ctx, $tokens, $cond)) or return $ctx->error($builder->errstr); $res .= $out; } $res; });