package Maypole::View::TT;
-use Lingua::EN::Inflect;
+use base 'Maypole::View::Base';
+use Maypole::Constants;
use Template;
-use File::Spec;
-use UNIVERSAL::moniker;
-use strict;
-
-sub new { bless {}, shift } # Not worth having
-
-sub _tt {
+sub template {
my ($self, $r) = @_;
- # This bit sucks.
- my $root = $r->{config}{template_root} || $r->get_template_root;
- Template->new({ INCLUDE_PATH => [
- $root,
- ($r->model_class && File::Spec->catdir($root, $r->model_class->moniker)),
- File::Spec->catdir($root, "custom"),
- File::Spec->catdir($root, "factory")
- ]});
+ my $template = Template->new({ INCLUDE_PATH => [ $self->paths($r) ]});
+ my $output;
+ if ($template->process($r->template, { $self->vars($r) }, \$output)) {
+ $r->{output} = $output;
+ return OK;
+ } else {
+ $r->{error} = $template->error;
+ return ERROR;
+ }
}
-sub _args {
- my ($self, $r) = @_;
- my $class = $r->model_class;
- my %args = (
- request => $r,
- objects => $r->objects,
- base => $r->config->{uri_base},
- config => $r->config
- # ...
- ) ;
- if ($class) {
- $args{classmetadata} = {
- name => $class,
- table => $class->table,
- columns => [ $class->display_columns ],
- colnames => { $class->column_names },
- related_accessors => [ $class->related($r) ],
- moniker => $class->moniker,
- plural => $class->plural_moniker,
- cgi => { $class->to_cgi },
- description => $class->description
- };
+1;
- # User-friendliness facility for custom template writers.
- if (@{$r->objects || []} > 1) {
- $args{$r->model_class->plural_moniker} = $r->objects;
- } else {
- ($args{$r->model_class->moniker}) = @{$r->objects ||[]};
- }
- }
+=head1 NAME
- # Overrides
- %args = (%args, %{$r->{template_args}||{}});
- %args;
-}
+Maypole::View::TT - A Template Toolkit view class for Maypole
-sub process {
- my ($self, $r) = @_;
- my $template = $self->_tt($r);
- my $output;
- $template->process($r->template, { $self->_args($r) }, \$output)
- || return $self->error($r, $template->error);
+=head1 SYNOPSIS
- $r->{content_type} ||= "text/html";
- $r->{output} = $output;
- return 200;
-}
+ BeerDB->config->{view} = "Maypole::View::TT"; # The default anyway
-sub error {
- my ($self, $r, $error) = @_;
- warn $error;
- if ($error =~ /not found$/) { return -1 }
- $r->{content_type} = "text/plain";
- $r->{output} = $error;
- $r->send_output;
- exit;
-}
+=head1 DESCRIPTION
-1;
+This is the default view class for Maypole; it uses the Template Toolkit
+to fill in templates with the objects produced by Maypole's model classes.
+Please see the Maypole manual, and in particular, the C<View> chapter,
+for the template variables available and for a refresher on how template
+components are resolved.
+
+=head1 AUTHOR
+
+Simon Cozens
+
+=cut