package Catalyst::Helper::View::TTSite; use strict; use File::Spec; sub mk_compclass { my ( $self, $helper, @args ) = @_; my $file = $helper->{file}; $helper->render_file( 'compclass', $file ); $self->mk_templates( $helper, @args ); } sub mk_templates { my ( $self, $helper ) = @_; my $base = $helper->{base},; my $ldir = File::Spec->catfile( $base, 'root', 'lib' ); my $sdir = File::Spec->catfile( $base, 'root', 'src' ); $helper->mk_dir($ldir); $helper->mk_dir($sdir); my $dir = File::Spec->catfile( $ldir, 'config' ); $helper->mk_dir($dir); foreach my $file (qw( main col url )) { $helper->render_file( "config_$file", File::Spec->catfile( $dir, $file ) ); } $dir = File::Spec->catfile( $ldir, 'site' ); $helper->mk_dir($dir); foreach my $file (qw( wrapper layout html header footer )) { $helper->render_file( "site_$file", File::Spec->catfile( $dir, $file ) ); } foreach my $file (qw( welcome.tt2 message.tt2 error.tt2 ttsite.css )) { $helper->render_file( $file, File::Spec->catfile( $sdir, $file ) ); } } =head1 NAME Catalyst::Helper::View::TTSite - Helper for TT view which builds a skeleton web site =head1 SYNOPSIS # use the helper to create the view module and templates $ script/myapp_create.pl view HTML TTSite # add something like the following to your main application module sub message : Global { my ( $self, $c ) = @_; $c->stash->{template} = 'message.tt2'; $c->stash->{message} ||= $c->req->param('message') || 'No message'; } sub default : Private { my ( $self, $c ) = @_; $c->stash->{template} = 'welcome.tt2'; } sub end : Private { # Or use Catalyst::Action::RenderView my ( $self, $c ) = @_; $c->forward( $c->view('HTML') ); } =head1 DESCRIPTION This helper module creates a TT View module. It goes further than Catalyst::Helper::View::TT in that it additionally creates a simple set of templates to get you started with your web site presentation. It creates the templates in F directory underneath your main project directory. In here two further subdirectories are created: F which contains the main page templates, and F containing a library of other template components (header, footer, etc.) that the page templates use. The view module that the helper creates is automatically configured to locate these templates. =head2 Default Rendering To render a template the following process is applied: The configuration template F is rendered. This is controlled by the C configuration variable set in the controller generated by Catalyst::Helper::View::TTsite. Additionally, templates referenced by the C directive will then be rendered. By default the following additional templates are set: F, which defines color names and RGB their RGB values and F, which defines site wide variables available to templates. Next, the template defined by the C config variable is called. The default wrapper template is located in F. The wrapper template passes files with C<.css/.js/.txt> extensions through as text OR processes the templates defined after the C directive: C and C. Based on the default value of the C directive in F, the following templates are processed in order: =over 4 =item * F =item * F =item * F =item * F =item * F =back Finally, the rendered content is returned to the bowser. =head1 METHODS =head2 mk_compclass Generates the component class. =head2 mk_templates Generates the templates. =cut =head1 SEE ALSO L, L, L, L =head1 AUTHOR Andy Wardley =head1 LICENSE This library is free software. You can redistribute it and/or modify it under the same terms as perl itself. =cut 1; __DATA__ __compclass__ package [% class %]; use strict; use base 'Catalyst::View::TT'; __PACKAGE__->config({ INCLUDE_PATH => [ [% app %]->path_to( 'root', 'src' ), [% app %]->path_to( 'root', 'lib' ) ], PRE_PROCESS => 'config/main', WRAPPER => 'site/wrapper', ERROR => 'error.tt2', TIMER => 0, render_die => 1, }); =head1 NAME [% class %] - Catalyst TTSite View =head1 SYNOPSIS See L<[% app %]> =head1 DESCRIPTION Catalyst TTSite View. =head1 AUTHOR [% author %] =head1 LICENSE This library is free software. You can redistribute it and/or modify it under the same terms as Perl itself. =cut 1; __config_main__ [% USE Date; year = Date.format(Date.now, '%Y'); -%] [% TAGS star -%] [% # config/main # # This is the main configuration template which is processed before # any other page, by virtue of it being defined as a PRE_PROCESS # template. This is the place to define any extra template variables, # macros, load plugins, and perform any other template setup. IF Catalyst.debug; # define a debug() macro directed to Catalyst's log MACRO debug(message) CALL Catalyst.log.debug(message); END; # define a data structure to hold sitewide data site = { title => 'Catalyst::View::TTSite Example Page', copyright => '[* year *] Your Name Here', }; # load up any other configuration items PROCESS config/col + config/url; # set defaults for variables, etc. DEFAULT message = 'There is no message'; -%] __config_col__ [% TAGS star -%] [% site.rgb = { black = '#000000' white = '#ffffff' grey1 = '#46494c' grey2 = '#c6c9cc' grey3 = '#e3e6ea' red = '#CC4444' green = '#66AA66' blue = '#89b8df' orange = '#f08900' }; site.col = { page = site.rgb.white text = site.rgb.grey1 head = site.rgb.grey3 line = site.rgb.orange message = site.rgb.green error = site.rgb.red }; -%] __config_url__ [% TAGS star -%] [% base = Catalyst.req.base; site.url = { base = base home = "${base}welcome" message = "${base}message" } -%] __site_wrapper__ [% TAGS star -%] [% IF template.name.match('\.(css|js|txt)'); debug("Passing page through as text: $template.name"); content; ELSE; debug("Applying HTML page layout wrappers to $template.name\n"); content WRAPPER site/html + site/layout; END; -%] __site_html__ [% TAGS star -%] [% template.title or site.title %] [% content %] __site_layout__ [% TAGS star -%]
[% content %]
__site_header__ [% TAGS star -%]

[% template.title or site.title %]

__site_footer__ [% TAGS star -%] __welcome.tt2__ [% TAGS star -%] [% META title = 'Catalyst/TT View!' %]

Yay! You're looking at a page generated by the Catalyst::View::TT plugin module.

This is the welcome page. Why not try the equally-exciting Message Page?

__message.tt2__ [% TAGS star -%] [% META title = 'Catalyst/TT View!' %]

Yay! You're looking at a page generated by the Catalyst::View::TT plugin module.

We have a message for you: [% message %].

Why not try updating the message? Go on, it's really exciting, honest!

__error.tt2__ [% TAGS star -%] [% META title = 'Catalyst/TT Error' %]

An error has occurred. We're terribly sorry about that, but it's one of those things that happens from time to time. Let's just hope the developers test everything properly before release...

Here's the error message, on the off-chance that it means something to you: [% error %]

__ttsite.css__ [% TAGS star %] html { height: 100%; } body { background-color: [% site.col.page %]; color: [% site.col.text %]; margin: 0px; padding: 0px; height: 100%; } #header { background-color: [% site.col.head %]; border-bottom: 1px solid [% site.col.line %]; } #footer { background-color: [% site.col.head %]; text-align: center; border-top: 1px solid [% site.col.line %]; position: absolute; bottom: 0; left: 0px; width: 100%; padding: 4px; } #content { padding: 10px; } h1.title { padding: 4px; margin: 0px; } .message { color: [% site.col.message %]; } .error { color: [% site.col.error %]; }