X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=lib%2FMaypole%2FView%2FBase.pm;h=95c8d9dd09f9e3b6bf6270304d4c6995b7f7d38a;hb=9b8f3c269605db27908000957b20cc3a336f9148;hp=61c887d3ef0bba3c91922a06ec66de8eb5cecc9c;hpb=5ba93a09518403ae28e8a71b5299e2458a6dfa0b;p=maypole.git diff --git a/lib/Maypole/View/Base.pm b/lib/Maypole/View/Base.pm index 61c887d..95c8d9d 100644 --- a/lib/Maypole/View/Base.pm +++ b/lib/Maypole/View/Base.pm @@ -8,7 +8,7 @@ sub new { bless {}, shift } # By default, do nothing. sub paths { my ( $self, $r ) = @_; - my $root = $r->{config}{template_root} || $r->get_template_root; + my $root = $r->config->template_root || $r->get_template_root; return ( $root, ( @@ -23,7 +23,7 @@ sub paths { sub vars { my ( $self, $r ) = @_; my $class = $r->model_class; - my $base = $r->{config}->{uri_base}; + my $base = $r->config->uri_base; $base =~ s/\/+$//; my %args = ( request => $r, @@ -38,6 +38,7 @@ sub vars { name => $class, table => $class->table, columns => [ $class->display_columns ], + list_columns => [ $class->list_columns ], colnames => { $class->column_names }, related_accessors => [ $class->related($r) ], moniker => $class->moniker, @@ -61,10 +62,10 @@ sub vars { sub process { my ( $self, $r ) = @_; - my $status = $self->template($r); - return $self->error($r) if $status != OK; $r->{content_type} ||= "text/html"; $r->{document_encoding} ||= "utf-8"; + my $status = $self->template($r); + return $self->error($r) if $status != OK; return OK; } @@ -108,3 +109,53 @@ EOF sub template { die shift() . " didn't define a decent template method!" } 1; + + +=head1 NAME + +Maypole::View::Base - Base cl + +=head1 DESCRIPTION + +This is the base class for Maypole view classes. This is an abstract class +meant to define the interface, and can't be used directly. + +=head2 process + +This is the engine of this module. It populates all the relevant variables +and calls the requested action. + +Anyone subclassing this for a different database abstraction mechanism +needs to provide the following methods: + +=head2 template + +In this method you do the actual processing of your template. it should use L +to search for components, and provide the templates with easy access to the contents +of L. It should put the result in $r->{output} and return OK if processing was +sucessfull, or populate $r->{error} and return ERROR if it fails. + +=head1 Other overrides + +Additionally, individual derived model classes may want to override the + +=head2 new + +The default constructor does nothing. You can override this to perform actions +during view initialization. + +=head2 paths + +Returns search paths for templates. the default method returns factory, custom and + under the configured template root. + +=head2 vars + +returns a hash of data the template should have access to. The default one populates +classmetadata if there is a class, as well as setting the data objects by name if +there is one or more objects available. + +=head2 error + + +=cut