Catalyst::View::Template::Declare - Use Template::Declare with Catalyst
Version 0.02
Create the view:
myapp_create.pl view TD Template::Declare
Add templates in MyApp::View::TD::<name>:
MyApp::View::TD::<name>
package MyApp::View::TD::Test; use Template::Declare::Tags; template foo => sub { html {} }; template bar => sub { ... }; 1;
Then use the templates from your application:
$c->view('TD')->template('foo'); $c->detach('View::TD');
The Catalyst context is passed as the second agument to the templates:
template foo => sub { my ($self, $c) = @_; return 'This is the '. $c->action. ' action.'; };
The Catalyst stash is passed as the third argument, but is also available via the glocal $_ variable for the duration of the template:
$_
template bar => sub { return "Hello, $_{world}"; };
Have fun. This is all somewhat experimental and subject to change.
Make a view:
package MyApp::View::TD; use base 'Catalyst::View::Template::Declare'; 1;
Make a template:
package MyApp::View::TD::Root; use Template::Declare::Tags; template foo => sub { my ($self, $c) = @_; html { head { title { $c->stash->{title} } }; body { "Hello, world" } } };
In your app:
$c->view('TD')->template('foo'); $c->stash(title => 'test'); $c->detach('View::TD');
And get the output:
<html><head><title>test</title></head><body>Hello, world</body></html>
You can spread your templates out over multiple files. If your view is called MyApp::View::TD, then everything in MyApp::View::TD::* will be included and templates declared in those files will be available as though they were declared in your main view class.
Example:
package MyApp::View::TD::Foo; use Template::Declare::Tags; template bar => sub { ... }; 1;
Then you can set $c->view('TD')->template('bar') and everything will work as you expect.
$c->view('TD')->template('bar')
The arguments passed to the templates are:
$self
The object or package name in which the template is defined.
$c
The Catalyst context object.
$stash
A copy of the Catalyst stash, also available via $_. Modifications to this copy of the stash will have no effect on the contents of $c->stash.
$c->stash
$args
Any arguments passed to render().
render()
For those stuck with a version of Template::Declare older then 0.26, no arguments will be passed to the templates. But you can still use the otherwise-deprecated c package to get at the Catalyst context:
c
template bar => sub { "Hello, ". c->stash->{world} };
Render the template in $self->template; see Catalyst::View::Templated for information on how to specify the template.
$self->template
Render the template named by $template and return the output.
$template
Not for you.
Jonathan Rockway, <jrockway at cpan.org>
<jrockway at cpan.org>
Please report any bugs or feature requests to bug-catalyst-view-template-declare at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Catalyst-View-Template-Declare. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
bug-catalyst-view-template-declare at rt.cpan.org
Visit #catalyst on irc.perl.org, submit an RT ticket, or send me an e-mail.
The git repository is at http://git.jrock.us/.
Catalyst::View::Templated
Template::Declare
Jifty
Copyright 2007 Jonathan Rockway, all rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
To install Catalyst::View::Template::Declare, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Catalyst::View::Template::Declare
CPAN shell
perl -MCPAN -e shell install Catalyst::View::Template::Declare
For more information on module installation, please visit the detailed CPAN module installation guide.