1 package Catalyst::Helper::View::TTSite;
7 my ( $self, $helper, @args ) = @_;
8 my $file = $helper->{file};
9 $helper->render_file( 'compclass', $file );
10 $self->mk_templates( $helper, @args );
14 my ( $self, $helper ) = @_;
15 my $base = $helper->{base},;
16 my $ldir = File::Spec->catfile( $base, 'root', 'lib' );
17 my $sdir = File::Spec->catfile( $base, 'root', 'src' );
19 $helper->mk_dir($ldir);
20 $helper->mk_dir($sdir);
22 my $dir = File::Spec->catfile( $ldir, 'config' );
23 $helper->mk_dir($dir);
25 foreach my $file (qw( main col url )) {
26 $helper->render_file( "config_$file",
27 File::Spec->catfile( $dir, $file ) );
30 $dir = File::Spec->catfile( $ldir, 'site' );
31 $helper->mk_dir($dir);
33 foreach my $file (qw( wrapper layout html header footer )) {
34 $helper->render_file( "site_$file",
35 File::Spec->catfile( $dir, $file ) );
38 foreach my $file (qw( welcome.tt2 message.tt2 error.tt2 ttsite.css )) {
39 $helper->render_file( $file, File::Spec->catfile( $sdir, $file ) );
46 Catalyst::Helper::View::TTSite - Helper for TT view which builds a skeleton web site
50 # use the helper to create the view module and templates
52 $ script/myapp_create.pl view TT TTSite
54 # add something like the following to your main application module
56 sub message : Global {
57 my ( $self, $c ) = @_;
58 $c->stash->{template} = 'message.tt2';
59 $c->stash->{message} ||= $c->req->param('message') || 'No message';
62 sub default : Private {
63 my ( $self, $c ) = @_;
64 $c->stash->{template} = 'welcome.tt2';
68 my ( $self, $c ) = @_;
69 $c->forward('MyApp::V::TT');
74 This helper module creates a TT View module. It goes further than
75 Catalyst::Helper::View::TT in that it additionally creates a simple
76 set of templates to get you started with your web site presentation.
78 It creates the templates in a F<templates> directory underneath your
79 main project directory. In here two further subdirectories are
80 created: F<src> which contains the main page templates, and F<lib>
81 containing a library of other templates components (header, footer,
82 etc.) that the page templates use.
84 The view module that the helper creates is automatically configured
85 to locate these templates.
91 Generates the component class.
95 Generates the templates.
101 L<Catalyst>, L<Catalyst::View::TT>, L<Catalyst::Helper>,
102 L<Catalyst::Helper::View::TT>
106 Andy Wardley <abw@cpan.org>
110 This library is free software . You can redistribute it and/or modify
111 it under the same terms as perl itself.
123 use base 'Catalyst::View::TT';
125 __PACKAGE__->config({
127 [% app %]->path_to( 'root', 'src' ),
128 [% app %]->path_to( 'root', 'lib' )
130 PRE_PROCESS => 'config/main',
131 WRAPPER => 'site/wrapper',
132 ERROR => 'error.tt2',
138 [% class %] - Catalyst TTSite View
146 Catalyst TTSite View.
154 This library is free software, you can redistribute it and/or modify
155 it under the same terms as Perl itself.
163 year = Date.format(Date.now, '%Y');
168 # This is the main configuration template which is processed before
169 # any other page, by virtue of it being defined as a PRE_PROCESS
170 # template. This is the place to define any extra template variables,
171 # macros, load plugins, and perform any other template setup.
174 # define a debug() macro directed to Catalyst's log
175 MACRO debug(message) CALL Catalyst.log.debug(message);
178 # define a data structure to hold sitewide data
180 title => 'Catalyst::View::TTSite Example Page',
181 copyright => '[* year *] Your Name Here',
184 # load up any other configuration items
188 # set defaults for variables, etc.
190 message = 'There is no message';
208 page = site.rgb.white
209 text = site.rgb.grey1
210 head = site.rgb.grey3
211 line = site.rgb.orange
212 message = site.rgb.green
218 [% base = Catalyst.req.base;
222 home = "${base}welcome"
223 message = "${base}message"
228 [% IF template.name.match('\.(css|js|txt)');
229 debug("Passing page through as text: $template.name");
232 debug("Applying HTML page layout wrappers to $template.name\n");
233 content WRAPPER site/html + site/layout;
238 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
241 <title>[% template.title or site.title %]</title>
242 <style type="text/css">
243 [% PROCESS ttsite.css %]
252 <div id="header">[% PROCESS site/header %]</div>
258 <div id="footer">[% PROCESS site/footer %]</div>
261 <!-- BEGIN site/header -->
262 <h1 class="title">[% template.title or site.title %]</h1>
263 <!-- END site/header -->
266 <!-- BEGIN site/footer -->
267 <div id="copyright">© [% site.copyright %]</div>
268 <!-- END site/footer -->
271 [% META title = 'Catalyst/TT View!' %]
273 Yay! You're looking at a page generated by the Catalyst::View::TT
277 This is the welcome page. Why not try the equally-exciting
278 <a href="[% site.url.message %]">Message Page</a>?
282 [% META title = 'Catalyst/TT View!' %]
284 Yay! You're looking at a page generated by the Catalyst::View::TT
288 We have a message for you: <span class="message">[% message %]</span>.
291 Why not try updating the message? Go on, it's really exciting, honest!
293 <form action="[% site.url.message %]"
294 method="POST" enctype="application/x-www-form-urlencoded">
295 <input type="text" name="message" value="[% message %]" />
296 <input type="submit" name="submit" value=" Update Message "/>
300 [% META title = 'Catalyst/TT Error' %]
302 An error has occurred. We're terribly sorry about that, but it's
303 one of those things that happens from time to time. Let's just
304 hope the developers test everything properly before release...
307 Here's the error message, on the off-chance that it means something
308 to you: <span class="error">[% error %]</span>
317 background-color: [% site.col.page %];
318 color: [% site.col.text %];
325 background-color: [% site.col.head %];
326 border-bottom: 1px solid [% site.col.line %];
330 background-color: [% site.col.head %];
332 border-top: 1px solid [% site.col.line %];
350 color: [% site.col.message %];
354 color: [% site.col.error %];