The render method uses the results from engine and template to
process a selected template through Template Toolkit.
####
render ($engine, $template)
####
sub render {
my $self = shift;
my $tt = $self->engine;
my $self_object = $self->reflect->object; # in case we have a classname
$tt->process($self->template, { self => $self_object }, \my $output)
or die $tt->error; # passes Template::Exception upward
$self->display($output);
}
####
sub template {
'[% self.CGI.header %]This page intentionally left blank.';
}
####
Called when a page gains control, either at the beginning for a
response, or in the middle when switched for rendering. Defaults to
nothing.
####
sub dispatch {
my $self = shift;
$self->param('rm') eq 'Webmail' and return 'Local::Page::Webmail' ;
return 'Local::Page::Welcome';
}
####
sub activate {
my $self = shift;
eval {
$self->app_enter;
my $this_page = $self->dispatch;
$this_page->control_enter;
$this_page->respond_enter;
my $next_page = $this_page->respond;
$this_page->respond_leave;
if ($this_page ne $next_page) {
$this_page->control_leave;
$next_page->control_enter;
}
$next_page->render_enter;
$next_page->render;
$next_page->render_leave;
$next_page->control_leave;
$self->app_leave;
};
$self->error($@) if $@; # failed something, go to safe mode
}
####
our $_mirror = __PACKAGE__->reflect; # for slots that aren't subs
####
$_mirror->addSlot
([qw(CGI FIELD autoload)] => sub { # must be reset in mod_perl
require CGI;
CGI->new;
});
####
$_mirror->addSlot
([qw(engine FIELD autoload)] => sub {
my $self = shift;
require Template;
Template->new or die "Creating tt: $Template::ERROR\n";
});
####
app_enter app_leave control_enter control_leave
render_enter render_leave respond_enter respond_leave
####
#!/usr/bin/perl
BEGIN {
my $path='~/perl/lib:~/perl:~/perl/share/perl/5.8.4:~/perl/lib/perl/5.8.4';
for my $p (split ':', $path) {
$p =~ s!~!/home/terry!;
warn $p;
unshift @INC, $p;
}
warn "@INC";
}
use base qw(CGI::Prototype);
my $o = __PACKAGE__->reflect;
# The next line returns
# Class::Prototyped::Mirror=REF(0x816811c) at nullapp.pl line 23.
# Why does it not return CGI::Prorotype::Mirror=REF
# or main::MIRROR=REF
warn $o;
# Why does this fail?
warn $o->engine;
warn $o->display('hi');
CGI::Prototype->activate;