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 $tdir = File::Spec->catfile( $base, 'root', 'templates' );
17 my $ldir = File::Spec->catfile( $tdir, 'lib' );
18 my $sdir = File::Spec->catfile( $tdir, 'src' );
20 $helper->mk_dir($ldir);
21 $helper->mk_dir($sdir);
23 my $dir = File::Spec->catfile( $ldir, 'config' );
24 $helper->mk_dir($dir);
26 foreach my $file (qw( main col url )) {
27 $helper->render_file( "config_$file",
28 File::Spec->catfile( $dir, $file ) );
31 $dir = File::Spec->catfile( $ldir, 'site' );
32 $helper->mk_dir($dir);
34 foreach my $file (qw( wrapper layout html header footer )) {
35 $helper->render_file( "site_$file",
36 File::Spec->catfile( $dir, $file ) );
39 foreach my $file (qw( welcome.tt2 message.tt2 error.tt2 ttsite.css )) {
40 $helper->render_file( $file, File::Spec->catfile( $sdir, $file ) );
47 Catalyst::Helper::View::TTSite - Helper for TT view which builds a skeleton web site
51 # use the helper to create the view module and templates
53 $ script/myapp_create.pl view TT TTSite
55 # add something like the following to your main application module
57 sub message : Global {
58 my ( $self, $c ) = @_;
59 $c->stash->{template} = 'message.tt2';
60 $c->stash->{message} = $c->req->param('message') || 'Hello World';
63 sub default : Private {
64 my ( $self, $c ) = @_;
65 $c->stash->{template} = 'welcome.tt2';
69 my ( $self, $c ) = @_;
70 $c->forward('MyApp::V::TT');
75 This helper module creates a TT View module. It goes further than
76 Catalyst::Helper::View::TT in that it additionally creates a simple
77 set of templates to get you started with your web site presentation.
79 It creates the templates in a F<templates> directory underneath your
80 main project directory. In here two further subdirectories are
81 created: F<src> which contains the main page templates, and F<lib>
82 containing a library of other templates components (header, footer,
83 etc.) that the page templates use.
85 The view module that the helper creates is automatically configured
86 to locate these templates.
92 Generates the component class.
96 Generates the templates.
102 L<Catalyst>, L<Catalyst::View::TT>, L<Catalyst::Helper>,
103 L<Catalyst::Helper::View::TT>
107 Andy Wardley <abw@cpan.org>
111 This library is free software . You can redistribute it and/or modify
112 it under the same terms as perl itself.
124 use base 'Catalyst::View::TT';
126 my $root = [% app %]->config->{root};
128 __PACKAGE__->config({
129 CATALYST_VAR => 'Catalyst',
130 INCLUDE_PATH => [ "$root/templates/src", "$root/templates/lib" ],
131 PRE_PROCESS => 'config/main',
132 WRAPPER => 'site/wrapper',
133 ERROR => 'error.tt2',
139 [% class %] - TT View Component
155 This library is free software . You can redistribute it and/or modify
156 it under the same terms as perl itself.
164 year = Date.format(Date.now, '%Y');
169 # This is the main configuration template which is processed before
170 # any other page, by virtue of it being defined as a PRE_PROCESS
171 # template. This is the place to define any extra template variables,
172 # macros, load plugins, and perform any other template setup.
175 # define a debug() macro directed to Catalyst's log
176 MACRO debug(message) CALL Catalyst.log.debug(message);
179 # define a data structure to hold sitewide data
181 title => 'Catalyst::View::TTSite Example Page',
182 copyright => '[* year *] Your Name Here',
185 # load up any other configuration items
189 # set defaults for variables, etc.
191 message = 'There is no message';
209 page = site.rgb.white
210 text = site.rgb.grey1
211 head = site.rgb.grey3
212 line = site.rgb.orange
213 message = site.rgb.green
219 [% base = Catalyst.req.base;
223 home = "${base}welcome"
224 message = "${base}message"
229 [% IF template.name.match('\.(css|js|txt)');
230 debug("Passing page through as text: $template.name");
233 debug("Applying HTML page layout wrappers to $template.name\n");
234 content WRAPPER site/html + site/layout;
239 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
242 <title>[% template.title or site.title %]</title>
243 <style type="text/css">
244 [% PROCESS ttsite.css %]
253 <div id="header">[% PROCESS site/header %]</div>
259 <div id="footer">[% PROCESS site/footer %]</div>
262 <!-- BEGIN site/header -->
263 <h1 class="title">[% template.title or site.title %]</h1>
264 <!-- END site/header -->
267 <!-- BEGIN site/footer -->
268 <div id="copyright">© [% site.copyright %]</div>
269 <!-- END site/footer -->
272 [% META title = 'Catalyst/TT View!' %]
274 Yay! You're looking at a page generated by the Catalyst::View::TT
278 This is the welcome page. Why not try the equally-exciting
279 <a href="[% site.url.message %]">Message Page</a>?
283 [% META title = 'Catalyst/TT View!' %]
285 Yay! You're looking at a page generated by the Catalyst::View::TT
289 We have a message for you: <span class="message">[% message %]</span>.
292 Why not try updating the message? Go on, it's really exciting, honest!
294 <form action="[% site.url.message %]"
295 method="POST" enctype="application/x-www-form-urlencoded">
296 <input type="text" name="message" value="[% message %]" />
297 <input type="submit" name="submit" value=" Update Message "/>
301 [% META title = 'Catalyst/TT Error' %]
303 An error has occurred. We're terribly sorry about that, but it's
304 one of those things that happens from time to time. Let's just
305 hope the developers test everything properly before release...
308 Here's the error message, on the off-chance that it means something
309 to you: <span class="error">[% error %]</span>
318 background-color: [% site.col.page %];
319 color: [% site.col.text %];
326 background-color: [% site.col.head %];
327 border-bottom: 1px solid [% site.col.line %];
331 background-color: [% site.col.head %];
333 border-top: 1px solid [% site.col.line %];
351 color: [% site.col.message %];
355 color: [% site.col.error %];