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 )