X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fp5-CGI-Ex;a=blobdiff_plain;f=lib%2FCGI%2FEx%2FTemplate.pm;h=97d29bc7be61e0b3aca35211da1e3257f2884379;hp=76cae387f68d0f7a8501bbadfe1336ff8fb4a784;hb=ed00221d27dfab1e82ec2ea040ab4c399a91c545;hpb=85070b46d0a93ddbeef07341421adb8389a55418 diff --git a/lib/CGI/Ex/Template.pm b/lib/CGI/Ex/Template.pm index 76cae38..97d29bc 100644 --- a/lib/CGI/Ex/Template.pm +++ b/lib/CGI/Ex/Template.pm @@ -1,92 +1,159 @@ package CGI::Ex::Template; +=head1 NAME + +CGI::Ex::Template - Template::Alloy based TT2/TT3/HT/HTE/Tmpl/Velocity engine. + +=cut + use strict; -use vars qw(@INCLUDE_PATH $CONTENT_SUBDIR); -use base qw(Template); +use warnings; +use Template::Alloy 1.004; +use base qw(Template::Alloy); +use vars qw($VERSION + $QR_PRIVATE + $WHILE_MAX + $MAX_EVAL_RECURSE + $MAX_MACRO_RECURSE + $STAT_TTL + $EXTRA_COMPILE_EXT + $PERL_COMPILE_EXT + $SCALAR_OPS + $FILTER_OPS + $LIST_OPS + $HASH_OPS + $VOBJS + ); + +$VERSION = '2.24'; + +### install true symbol table aliases that can be localized +*QR_PRIVATE = *Template::Alloy::QR_PRIVATE; +*WHILE_MAX = *Template::Alloy::WHILE_MAX; +*MAX_EVAL_RECURSE = *Template::Alloy::MAX_EVAL_RECURSE; +*MAX_MACRO_RECURSE = *Template::Alloy::MAX_MACRO_RECURSE; +*STAT_TTL = *Template::Alloy::STAT_TTL; +*EXTRA_COMPILE_EXT = *Template::Alloy::EXTRA_COMPILE_EXT; +*PERL_COMPILE_EXT = *Template::Alloy::PERL_COMPILE_EXT; +*SCALAR_OPS = *Template::Alloy::SCALAR_OPS; +*FILTER_OPS = *Template::Alloy::FILTER_OPS; +*LIST_OPS = *Template::Alloy::LIST_OPS; +*HASH_OPS = *Template::Alloy::HASH_OPS; +*VOBJS = *Template::Alloy::VOBJS; -use CGI::Ex; -use CGI::Ex::Fill; +1; -$CONTENT_SUBDIR ||= 'content'; +__END__ -###----------------------------------------------------------------### +=head1 SYNOPSIS -sub new { - my $class = shift; - my $args = ref($_[0]) ? shift : {@_}; +=head2 Template::Toolkit style usage - $args->{INCLUDE_PATH} ||= \@INCLUDE_PATH; + my $t = Template::Alloy->new( + INCLUDE_PATH => ['/path/to/templates'], + ); - return $class->SUPER::new($args); -} + my $swap = { + key1 => 'val1', + key2 => 'val2', + code => sub { 42 }, + hash => {a => 'b'}, + }; -sub process { - my $self = ref($_[0]) ? shift : shift->new; - my $in = shift; + # print to STDOUT + $t->process('my/template.tt', $swap) + || die $t->error; - ### force the content to have a .html prefix - if (! ref $in) { - $in .= '.html' if $in !~ /\.\w+$/; - } + # process into a variable + my $out = ''; + $t->process('my/template.tt', $swap, \$out); - ### prepend "content" dir as needed - if (! ref($in) # not a scalar ref or a file glob - && $in =~ m|^\w+(\.\w+)?(/\w+(\.\w+)?)*$| # not an absolute filename - && index($in, $CONTENT_SUBDIR) == -1) { - $in = $CONTENT_SUBDIR .'/'. $in; - } + ### Alloy uses the same syntax and configuration as Template::Toolkit - return $self->SUPER::process($in, @_); -} -###----------------------------------------------------------------### +=head2 HTML::Template::Expr style usage -sub out { - my $self = ref($_[0]) ? shift : shift->new; -# dex $self; - my $in = shift; - my $form = shift; - my $fill = shift; - my $out = ''; + my $t = Template::Alloy->new( + filename => 'my/template.ht', + path => ['/path/to/templates'], + ); - ### run the template - my $status = $self->process($in, $form, \$out) || die $Template::ERROR; + my $swap = { + key1 => 'val1', + key2 => 'val2', + code => sub { 42 }, + hash => {a => 'b'}, + }; - ### fill in any forms - &CGI::Ex::Fill::form_fill(\$out, $fill) if $fill && ! $self->{no_fill}; + $t->param($swap); - return $out; -} + # print to STDOUT (errors die) + $t->output(print_to => \*STDOUT); -sub print { - my $self = ref($_[0]) ? shift : shift->new; - my $in = shift; - my $form = shift; - my $fill = shift || $form; + # process into a variable + my $out = $t->output; - &CGI::Ex::content_type(); - print $self->out($in, $form, $fill); -} + ### Alloy can also use the same syntax and configuration as HTML::Template -###----------------------------------------------------------------### +=head2 Text::Tmpl style usage -1; + my $t = Template::Alloy->new; -__END__ + my $swap = { + key1 => 'val1', + key2 => 'val2', + code => sub { 42 }, + hash => {a => 'b'}, + }; -=head1 NAME + $t->set_delimiters('#[', ']#'); + $t->set_strip(0); + $t->set_values($swap); + $t->set_dir('/path/to/templates'); -CGI::Ex::Template - Beginning interface to Templating systems - for they are many + my $out = $t->parse_file('my/template.tmpl'); -=head1 SYNOPSIS + my $str = "Foo #[echo $key1]# Bar"; + my $out = $t->parse_string($str); - None yet. + + ### Alloy uses the same syntax and configuration as Text::Tmpl + +=head2 Velocity (VTL) style usage + + my $t = Template::Alloy->new; + + my $swap = { + key1 => 'val1', + key2 => 'val2', + code => sub { 42 }, + hash => {a => 'b'}, + }; + + my $out = $t->merge('my/template.vtl', $swap); + + my $str = "#set($foo 1 + 3) ($foo) ($bar) ($!baz)"; + my $out = $t->merge(\$str, $swap); =head1 DESCRIPTION -=head1 AUTHORS +CGI::Ex::Template is the original base for the code that is now +Template::Alloy. Template::Alloy employed enough complexity and +featureset to warrant moving it out to a separate namespace. -Paul Seamons +CGI::Ex::Template is now a place holder subclass of Template::Alloy. +You can use CGI::Ex::Template as a standalone module - but it is +suggested that you use Template::Alloy directly instead. -=cut +For examples of usage, configuration, syntax, bugs, vmethods, +directives, etc please refer to the L documentation. + +=head1 LICENSE + +This module may be distributed under the same terms as Perl itself. +=head1 AUTHOR + +Paul Seamons + +=cut