Template::Declare(3) User Contributed Perl Documentation Template::Declare(3)
NNAAMMEE
Template::Declare - Perlish declarative templates
SSYYNNOOPPSSIISS
"Template::Declare" is a pure-perl declarative HTML templating system.
Yes. Another one. There are many others like it, but this one is ours.
A few key features and buzzwords
All templates are 100% pure perl code
Simple declarative syntax
No angle brackets
Mixins
Inheritance
Public and private templates
UUSSAAGGEE
BBaassiicc uussaaggee
package MyApp::Templates;
use Template::Declare::Tags;
use base 'Template::Declare';
template simple => sub {
html {
head {}
body {
p {'Hello, world wide web!'};
}
}
};
package main;
use Template::Declare;
Template::Declare->init( roots => ['MyApp::Templates']);
print Template::Declare->show( 'simple');
# Output:
#
#
# <html>
# <head></head>
# <body>
# <p>Hello, world wide web!
# </p>
# </body>
# </html>
AA sslliigghhttllyy mmoorree aaddvvaanncceedd eexxaammppllee
In this example, we'll show off how to set attributes on HTML tags, how
to call other templates and how to declare a _p_r_i_v_a_t_e template that
can't be called directly.
package MyApp::Templates;
use Template::Declare::Tags;
use base 'Template::Declare';
private template 'header' => sub {
head {
title { 'This is a webpage'};
meta { attr { generator => "This is not your father's frontpage"}}
}
};
template simple => sub {
html {
show('header');
body {
p { attr { class => 'greeting'};
'Hello, world wide web!'};
}
}
};
package main;
use Template::Declare;
Template::Declare->init( roots => ['MyApp::Templates']);
print Template::Declare->show( 'simple');
# Output:
#
# <html>
# <head>
# <title>This is a webpage
# </title>
# <meta generator="This is not your father's frontpage" />
# </head>
# <body>
# <p class="greeting">Hello, world wide web!
# </p>
# </body>
# </html>
MMuullttiippllee tteemmppllaattee rroooottss ((sseeaarrcchh ppaatthhss))
IInnhheerriittaannccee
AAlliiaassiinngg
MMEETTHHOODDSS
iinniitt
This _c_l_a_s_s _m_e_t_h_o_d initializes the "Template::Declare" system.
roots
sshhooww TTEEMMPPLLAATTEE__NNAAMMEE
Call "show" with a "template_name" and "Template::Declare" will render
that template and return the content as a scalar.
aalliiaass
alias Some::Clever::Mixin under '/mixin';
iimmppoorrtt
import Wifty::UI::something under '/something';
hhaass__tteemmppllaattee PPAACCKKAAGGEE TTEEMMPPLLAATTEE__NNAAMMEE SSHHOOWW__PPRRIIVVAATTEE
Takes a package, template name and a boolean. The boolean determines
whether to show private templates.
Returns a reference to the template's code if found. Otherwise, returns
undef.
rreessoollvvee__tteemmppllaattee TTEEMMPPLLAATTEE__PPAATTHH IINNCCLLUUDDEE__PPRRIIVVAATTEE__TTEEMMPPLLAATTEESS
Turns a template path ("TEMPLATE_PATH") into a "CODEREF". If the
boolean "INCLUDE_PRIVATE_TEMPLATES" is true, resolves private template
in addition to public ones.
First it looks through all the valid Template::Declare roots. For each
root, it looks to see if the root has a template called $template_name
directly (or via an "import" statement). Then it looks to see if there
are any "alias"ed paths for the root with prefixes that match the tem-
plate we're looking for.
rreeggiisstteerr__tteemmppllaattee PPAACCKKAAGGEE TTEEMMPPLLAATTEE__NNAAMMEE CCOODDEERREEFF
This method registers a template called "TEMPLATE_NAME" in package
"PACKAGE". As you might guess, "CODEREF" defines the template's imple-
mentation.
rreeggiisstteerr__tteemmppllaattee PPAACCKKAAGGEE TTEEMMPPLLAATTEE__NNAAMMEE CCOODDEERREEFF
This method registers a private template called "TEMPLATE_NAME" in
package "PACKAGE". As you might guess, "CODEREF" defines the template's
implementation.
Private templates can't be called directly from user code but only from
other templates.
BBUUGGSS
Crawling all over, baby. Be very, very careful. This code is so cutting
edge, it can only be fashioned from carbon nanotubes.
Some specific bugs and design flaws that we'd love to see fixed
Output isn't streamy.
If you run into bugs or misfeatures, please report them to "bug-tem-
[email protected]".
SSEEEE AALLSSOO
Jifty
AAUUTTHHOORR
Jesse Vincent <
[email protected]>
CCOOPPYYRRIIGGHHTT
Copyright 2006-2007 Best Practical Solutions, LLC
perl v5.8.8 2007-01-18 Template::Declare(3)