CGI-Application-Plugin-TmplInnerOuter
view release on metacpan or search on metacpan
lib/CGI/Application/Plugin/TmplInnerOuter2.pm view on Meta::CPAN
return $tmpl;
}
my $default_code = $self->_tmplsetget_code($name);
if ((! defined $default_code ) and ($self->tmpl_outer_name eq $name) ){
$default_code = $self->_tmplsetget_code('main.html', __main_html());
}
require HTML::Template::Default;
if ( my $tmpl = HTML::Template::Default::get_tmpl($name, $default_code) ){
$self->{_tmplsetget}->{$name} = $tmpl;
return $tmpl;
}
else {
die("cant instance $name template");
}
}
croak('no name or object provided.');
}
sub _tmplsetget_code {
my $self = shift;
my($code,$name);
for my $val (@_){
if( defined $val){
if ($val=~/^\w+\.html$/){{
$name = $val;
}
else {
$code =$val;
}
}
}
$name ||= $self->tmpl_outer_name;
if(defined $code){
$self->{_tmplsetget_code}->{$name} = $code;
return $code;
}
elsif ( defined $name ){
if( my $code = $self->{_tmplsetget_code}->{$name} ){
return $code;
}
else {
return; #it's ok to return undef code, it just insists for a file template on disk
}
}
croak('no name or code provided');
}
sub __main_html {
my $self = shift;
return q{<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title><TMPL_VAR NAME=TITLE></title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
</head>
<body>
<TMPL_VAR NAME=BODY>
</body>
</html>};
}
sub tmpl_output {
my $self = shift;
$self->_feed_vars_all;
$self->_feed_merge;
return $self->tmpl_outer->output;
}
sub _feed_vars_all {
my $self = shift;
$self->_feed_vars( $self->tmpl_inner );
$self->_feed_vars( $self->tmpl_outer );
return 1;
}
sub _feed_merge {
my $self = shift;
$self->tmpl_outer->param( BODY => $self->tmpl_inner->output );
return 1;
}
sub tmpl_var {
my $self = shift;
$self->{_tmpl_vars} ||={};
if ( @_ ){
my %vars = @_;
for ( keys %vars ){
my $key = $_;
my $val = $vars{$key};
defined $val or next;
$self->{_tmpl_vars}->{$key} = $val;
};
}
$self->{_tmpl_vars};
}
sub _feed_vars {
my $self = shift;
my $tmpl = shift;
defined $tmpl or confess('missing arg');
debug('start');
my $vars = $self->tmpl_var;
VARS : for( keys %$vars){
my $key = $_;
my $val = $vars->{$key};
defined $val or next VARS;
( run in 1.009 second using v1.01-cache-2.11-cpan-13bb782fe5a )