]> git.decadent.org.uk Git - maypole.git/blobdiff - lib/Maypole/View/TT.pm
made db_colinfo test less fragile, changed test on @ISA to work with different ordering
[maypole.git] / lib / Maypole / View / TT.pm
index a1484d5eab77a2b030f230c0e322cb1a2ef8508a..3ab23be31da7c14740d41ad80e666bddf376c180 100644 (file)
@@ -1,4 +1,5 @@
 package Maypole::View::TT;
 package Maypole::View::TT;
+use Class::C3;
 use base 'Maypole::View::Base';
 use Maypole::Constants;
 use Template;
 use base 'Maypole::View::Base';
 use Maypole::Constants;
 use Template;
@@ -7,48 +8,52 @@ use File::Spec::Functions qw(catdir tmpdir);
 our $error_template; 
 { local $/; $error_template = <DATA>; }
 
 our $error_template; 
 { local $/; $error_template = <DATA>; }
 
+our $VERSION = '2.11';
+
 use strict;
 use strict;
-our $VERSION = 2.11;
 
 sub template {
 
 sub template {
-    my ( $self, $r ) = @_;
-    unless ($self->{tt}) {
-        my $view_options = $r->config->view_options || {};
-        $self->{provider} = Template::Provider->new($view_options);
-        $self->{tt}       = Template->new({
-            %$view_options,
-            LOAD_TEMPLATES => [ $self->{provider} ],
-        });
-    }
-
-    $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;
-    my $processed_ok = eval{$self->{tt}->process($template_file, { $self->vars($r) }, \$output );};
-    if ($processed_ok) {
-      $r->{output} = $output;
-      return OK;
+  my ( $self, $r ) = @_;
+  unless ($self->{tt}) {
+    my $view_options = $r->config->view_options || {};
+    $self->{provider} = Template::Provider->new($view_options);
+    $self->{tt}       = Template->new({
+                                      %$view_options,
+                                      LOAD_TEMPLATES => [ $self->{provider} ],
+                                     });
+  }
+
+  $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;
+  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 {
     } 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;
+      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;
+  }
 }
 
 
 sub report_error {
     my ($self, $r, $error, $type) = @_;
     my $output;
 }
 
 
 sub report_error {
     my ($self, $r, $error, $type) = @_;
     my $output;
+
+    warn "self : $self, r : $r, error : $error, type : $type\n";
+
     # Need to be very careful here.
     my $tt = Template->new;
     unless (ref $r->{config}) {
     # Need to be very careful here.
     my $tt = Template->new;
     unless (ref $r->{config}) {
@@ -60,7 +65,8 @@ sub report_error {
                     { err_type => $type, error => $error,
                       config => $r->{config},
                       request => $r,
                     { err_type => $type, error => $error,
                       config => $r->{config},
                       request => $r,
-        eval{$self->vars($r)} }, \$output )) {
+                      paths => $self->paths($r),
+                      eval{$self->vars($r)} }, \$output )) {
         $r->{output} = $output;
         if ($tt->error) { $r->{output} = "<html><body>Even the error template
         errored - ".$tt->error."</body></html>"; }
         $r->{output} = $output;
         if ($tt->error) { $r->{output} = "<html><body>Even the error template
         errored - ".$tt->error."</body></html>"; }
@@ -283,6 +289,18 @@ truncate, format, escape or encode trivially. A useful selection is included
 with Template Toolkit and they can also be found on CPAN or can be written
 easily. See L<Template::Manual::Filters>.
 
 with Template Toolkit and they can also be found on CPAN or can be written
 easily. See L<Template::Manual::Filters>.
 
+TT provides stderr and stdout filters, which allow you to write handy macros
+like this one to output debug information to your web server log, etc :
+
+=over 4
+
+[% MACRO debug_msg(text)
+    FILTER stderr; "[TT debug_msg] $text\n"; END;
+%]
+
+=back
+
+
 TT Macros allow you to reuse small blocks of content, directives, etc. The MACRO
 directive allows you to define a directive or directive block which is then
 evaluated each time the macro is called. Macros can be passed named parameters
 TT Macros allow you to reuse small blocks of content, directives, etc. The MACRO
 directive allows you to define a directive or directive block which is then
 evaluated each time the macro is called. Macros can be passed named parameters
@@ -399,23 +417,27 @@ the path "[% request.path %]". The error text returned was:
 
 <h2> Request details </h2>
 
 
 <h2> Request details </h2>
 
-<table>
+<table width="85%" cellspacing="2" cellpadding="1">
     [% FOR attribute = ["model_class", "table", "template", "path",
     "content_type", "document_encoding", "action", "args", "objects"] %]
     [% FOR attribute = ["model_class", "table", "template", "path",
     "content_type", "document_encoding", "action", "args", "objects"] %]
-    <tr> <td class="lhs"> [% attribute %] </td> <td class="rhs"> [%
+    <tr> <td class="lhs" width="35%"> <b>[% attribute %]</b> </td> <td class="rhs" width="65%"> [%
     request.$attribute.list.join(" , ") %] </td></tr>
     [% END %]
 </table>
 
     request.$attribute.list.join(" , ") %] </td></tr>
     [% END %]
 </table>
 
+<h2> Website / Template Paths </h2>
+<table width="85%" cellspacing="2" cellpadding="1">
+<tr><td class="lhs" width="35%"> <b>Base URI</b> </td><td class="rhs" width="65%">[% request.config.uri_base %]</td></tr>
+<tr><td class="lhs" width="35%"> <b>Paths</b> </td><td class="rhs" width="65%"> [% paths %] </td></tr>
+</table>
+
 <h2> Application configuration </h2>
 <h2> Application configuration </h2>
-<table>
-    [% FOR field IN config %]
-    <tr> <td class="lhs"> [% field.key %] </td> <td class="rhs"> [% 
-    $field.value.list.join(" , ") %] </td></tr>
-    [% END %]
+<table width="85%" cellspacing="2" cellpadding="1">
+    <tr><td class="lhs"  width="35%"> <b>Model </b> </td><td class="rhs" width="65%"> [% request.config.model %] </td></tr>
+    <tr><td class="lhs"  width="35%"> <b>View </b> </td><td class="rhs" width="65%"> [% request.config.view %] </td></tr>
+    <tr><td class="lhs" width="35%"> <b>Classes</b> </td><td class="rhs" width="65%"> [% request.config.classes.list.join(" , ") %] </td></tr>
+    <tr><td class="lhs" width="35%"> <b>Tables</b> </td><td class="rhs" width="65%"> [% request.config.display_tables.list.join(" , ") %] </td></tr>
 </table>
 
 </body>
 </html>
 </table>
 
 </body>
 </html>
-
-