X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=lib%2FMaypole%2FView%2FTT.pm;h=c399a6f69b5ffb5afffc41608d62b6b765e5b0a7;hb=02b642b7100a6e0a91e83aca3c4e63cd88786315;hp=7106b7a563f0d5593fdbe3860752aa488b1b575f;hpb=28823167d12d4cd1419cc6a58900c0fc5819e1af;p=maypole.git
diff --git a/lib/Maypole/View/TT.pm b/lib/Maypole/View/TT.pm
index 7106b7a..c399a6f 100644
--- a/lib/Maypole/View/TT.pm
+++ b/lib/Maypole/View/TT.pm
@@ -12,7 +12,6 @@ our $VERSION = 2.11;
sub template {
my ( $self, $r ) = @_;
-
unless ($self->{tt}) {
my $view_options = $r->config->view_options || {};
$self->{provider} = Template::Provider->new($view_options);
@@ -25,17 +24,24 @@ sub template {
$self->{provider}->include_path([ $self->paths($r) ]);
my $template_file = $r->template;
+
my $ext = $r->config->template_extension;
$template_file .= $ext if defined $ext;
my $output;
- if ($self->{tt}->process($template_file, { $self->vars($r) }, \$output )) {
- $r->{output} = $output;
- return OK;
- }
- else {
+ my $processed_ok = eval{$self->{tt}->process($template_file, { $self->vars($r) }, \$output );};
+ if ($processed_ok) {
+ $r->{output} = $output;
+ return OK;
+ } else {
+ if ($@) {
+ warn "fatal error in template '$template_file' : $@\n";
+ $r->{error} = "fatal error in template '$template_file' : $@";
+ } else {
+ warn "TT error for template '$template_file'\n" . $self->{tt}->error;
$r->{error} = "TT error for template '$template_file'\n" . $self->{tt}->error;
- return ERROR;
+ }
+ return ERROR;
}
}
@@ -45,10 +51,15 @@ sub report_error {
my $output;
# Need to be very careful here.
my $tt = Template->new;
+ unless (ref $r->{config}) {
+ warn "no config for this request\n";
+ $error .= '
There was a problem finding configuration for this request';
+ $r->{config} ||= {};
+ }
if ($tt->process(\$error_template,
- { err_type => $type, error => $error,
- config => { %{$r->{config}}},
- request => $r, # We have that at least
+ { err_type => $type, error => $error,
+ config => { (%{$r->{config}}) },
+ request => $r, # We have that at least
eval{$self->vars($r)} }, \$output )) {
$r->{output} = $output;
if ($tt->error) { $r->{output} = "