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, '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 {
59 $c->stash->{ template } = 'message.tt2';
60 $c->stash->{ message } = $c->req->param('message') || 'Hello World';
63 sub default : Private {
65 $c->stash->{ template } = 'welcome.tt2';
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';
130 my $root = $c->config->{ root };
131 my $template = $c->config->{ template } || { };
133 $template->{ CATALYST_VAR } ||= 'Catalyst',
134 $template->{ INCLUDE_PATH } ||= [ "$root/templates/src", "$root/templates/lib" ];
135 $template->{ PRE_PROCESS } ||= 'config/main';
136 $template->{ WRAPPER } ||= 'site/wrapper';
137 $template->{ ERROR } ||= 'error.tt2';
139 return $self->NEXT::new($c, @_);
144 [% class %] - TT View Component
160 This library is free software . You can redistribute it and/or modify
161 it under the same terms as perl itself.
169 year = Date.format(Date.now, '%Y');
174 # This is the main configuration template which is processed before
175 # any other page, by virtue of it being defined as a PRE_PROCESS
176 # template. This is the place to define any extra template variables,
177 # macros, load plugins, and perform any other template setup.
180 # define a debug() macro directed to Catalyst's log
181 MACRO debug(message) CALL Catalyst.log.debug(message);
184 # define a data structure to hold sitewide data
186 title => 'Catalyst::View::TTSite Example Page',
187 copyright => '[* year *] Your Name Here',
190 # load up any other configuration items
194 # set defaults for variables, etc.
196 message = 'There is no message';
214 page = site.rgb.white
215 text = site.rgb.grey1
216 head = site.rgb.grey3
217 line = site.rgb.orange
218 message = site.rgb.green
224 [% base = Catalyst.req.base;
228 home = "${base}welcome"
229 message = "${base}message"
234 [% IF template.name.match('\.(css|js|txt)');
235 debug("passing page through as text: $template.name");
238 debug("applying HTML page layout wrappers to $template.name\n");
239 content WRAPPER site/html + site/layout;
244 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
247 <title>[% template.title or site.title %]</title>
248 <style type="text/css">
249 [% PROCESS ttsite.css %]
258 <div id="header">[% PROCESS site/header %]</div>
264 <div id="footer">[% PROCESS site/footer %]</div>
267 <!-- BEGIN site/header -->
268 <h1 class="title">[% template.title or site.title %]</h1>
269 <!-- END site/header -->
272 <!-- BEGIN site/footer -->
273 <div id="copyright">© [% site.copyright %]</div>
274 <!-- END site/footer -->
277 [% META title = 'Catalyst/TT View!' %]
279 Yay! You're looking at a page generated by the Catalyst::View::TT
283 This is the welcome page. Why not try the equally-exciting
284 <a href="[% site.url.message %]">Message Page</a>?
288 [% META title = 'Catalyst/TT View!' %]
290 Yay! You're looking at a page generated by the Catalyst::View::TT
294 We have a message for you: <span class="message">[% message %]</span>.
297 Why not try updating the message? Go on, it's really exciting, honest!
299 <form action="[% site.url.message %]"
300 method="POST" enctype="application/x-www-form-urlencoded">
301 <input type="text" name="message" value="[% message %]" />
302 <input type="submit" name="submit" value=" Update Message "/>
306 [% META title = 'Catalyst/TT Error' %]
308 An error has occurred. We're terribly sorry about that, but it's
309 one of those things that happens from time to time. Let's just
310 hope the developers test everything properly before release...
313 Here's the error message, on the off-chance that it means something
314 to you: <span class="error">[% error %]</span>
323 background-color: [% site.col.page %];
324 color: [% site.col.text %];
331 background-color: [% site.col.head %];
332 border-bottom: 1px solid [% site.col.line %];
336 background-color: [% site.col.head %];
338 border-top: 1px solid [% site.col.line %];
356 color: [% site.col.message %];
360 color: [% site.col.error %];