# # CategoryLabelEx # 2006/04/20 1.00 First Version # 2006/12/2 1.01 Modified # # Copyright(c) 2006 By H.Fujimoto # package MT::Plugin::CategoryLabelEx; use strict; use MT; use MT::Template::Context; use MT::Plugin; use MT::Util qw( dirify ); # show plugin information to main menu my $plugin = MT::Plugin->new; if (MT->version_number >= 3.2) { $plugin->name('Category Label Extended'); $plugin->version('1.01'); $plugin->author_name('Hajime Fujimoto'); $plugin->author_link('http://www.h-fj.com/blog/'); } else { $plugin->name('Category Label Extended 1.01'); } $plugin->description('Extension for MTCategoryLabel tag.'); MT->add_plugin($plugin); # add tags MT::Template::Context->add_tag(CategoryLabelEx => \&category_label_ex); MT::Template::Context->add_tag(EntryCategoryEx => \&category_label_ex); MT::Template::Context->add_tag(CategoryFileName => \&category_filename); MT::Template::Context->add_tag(CategoryFilePath => \&category_filepath); sub category_label_ex { my ($ctx, $args) = @_; my $cat; if ($ctx->stash('tag') eq 'CategoryLabelEx') { $cat = &_get_category($ctx) or return ($ctx->error(MT->translate( "You used an [_1] tag outside of the proper context.", '<$MTCategoryLabelEx$>' ))); } elsif ($ctx->stash('tag') eq 'EntryCategoryEx') { my $entry = $ctx->stash('entry') or return $ctx->_no_entry_error('MTEntryCategoryEx'); $cat = $entry->category; return '' unless $cat; } my $label = $cat->label || ''; my $delim = $args->{'delimiter'} || quotemeta('|'); my @label_a = split /$delim/, $label; $label = $label_a[2] || ''; if ($args->{dirify}) { $label = dirify($label, $args->{dirify}); if ($label !~ m/\w/) { $label = 'cat' . $cat->id; } delete $args->{dirify}; } $label; } sub category_filename { my ($ctx, $args) = @_; my $cat = &_get_category($ctx) or return ($ctx->error(MT->translate( "You used an [_1] tag outside of the proper context.", '<$MTCategoryLabelEx$>' ))); my $label = $cat->label || ''; my $delim = $args->{'delimiter'} || quotemeta('|'); my @label_a = split /$delim/, $label; my $filename = $label_a[1] || ''; if ($args->{dirify}) { $filename = dirify($filename, $args->{dirify}); if ($filename !~ m/\w/) { $filename = 'cat' . $cat->id; } delete $args->{dirify}; } $filename; } sub category_filepath { my ($ctx, $args) = @_; my $cat = &_get_category($ctx) or return ($ctx->error(MT->translate( "You used an [_1] tag outside of the proper context.", '<$MTCategoryLabelEx$>' ))); my @cats = $cat->parent_categories; @cats = ($cat, @cats); my @path; while (my $c = pop @cats) { my $label = $c->label || ''; my $delim = $args->{'delimiter'} || quotemeta('|'); my @label_a = split /$delim/, $label; my $filename = $label_a[1] || ''; if ($args->{dirify}) { $filename = dirify($filename, $args->{dirify}); if ($filename !~ m/\w/) { $filename = 'cat' . $cat->id; } } push @path, $filename; } if ($args->{dirify}) { delete $args->{dirify}; } my $glue = $args->{'glue'} || '/'; join $glue, @path; } sub _get_category { my $ctx = shift; my $e = $ctx->stash('entry'); my $cat = ($ctx->stash('category') || $ctx->stash('archive_category')) || (($e = $ctx->stash('entry')) && $e->category); $cat; } 1;