1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
|
# This code is a part of Slash, and is released under the GPL.
# Copyright 1997-2001 by Open Source Development Network. See README
# and COPYING for more information, or see http://slashcode.com/.
# $Id: Plugin.pm,v 1.2.2.1 2001/09/26 21:11:00 pudge Exp $
package Slash::Display::Plugin;
=head1 NAME
Slash::Display::Plugin - Template Toolkit plugin for Slash
=head1 SYNOPSIS
[% USE Slash %]
[% Slash.someFunction('some data') %]
[% Slash.db.someMethod(var1, var2) %]
=head1 DESCRIPTION
Call available exported functions from Slash and Slash::Utility
from within your template. Also call methods from Slash::DB
with the C<db> method. Invoke with C<[% USE Slash %]>.
C<[% Slash.version %]> gives the version of Slash.
C<[% Slash.VERSION %]> (note case) gives the version
of this Slash Template plugin.
=cut
use strict;
use vars qw($VERSION $AUTOLOAD);
use Slash ();
use Slash::Utility ();
use base qw(Template::Plugin);
($VERSION) = ' $Revision: 1.2.2.1 $ ' =~ /\$Revision:\s+([^\s]+)/;
# BENDER: Forget your stupid theme park! I'm gonna make my own!
# With hookers! And blackjack! In fact, forget the theme park!
my %subs;
sub _populate {
return if %subs;
# mmmmmm, agic
no strict 'refs';
for my $pkg (qw(Slash Slash::Utility)) {
@subs{@{"${pkg}::EXPORT"}} =
map { *{"${pkg}::$_"}{CODE} } @{"${pkg}::EXPORT"};
}
$subs{version} = sub { Slash->VERSION };
}
sub new {
_populate();
my($class, $context, $name) = @_;
return bless {
_CONTEXT => $context,
}, $class;
}
sub db { Slash::Utility::getCurrentDB() }
sub AUTOLOAD {
# pull off first param before sending to function;
# that's the whole reason we have AUTOLOAD here,
# to de-OOP the call
my $obj = shift;
(my $name = $AUTOLOAD) =~ s/^.*://;
return if $name eq 'DESTROY';
if (exists $subs{$name}) {
local $Slash::Display::CONTEXT = $obj->{_CONTEXT};
return $subs{$name}->(@_);
} else {
warn "Can't find $name";
return;
}
}
1;
__END__
=head1 SEE ALSO
Template(3), Slash(3), Slash::Utility(3), Slash::Display(3).
|