NAME
Template::Declare - Perlish declarative templates
SYNOPSIS
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
USAGE
Basic usage
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>
A slightly more advanced example
In this example, we'll show off how to set attributes on HTML tags, how to call other templates and how to declare a private 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>
Multiple template roots (search paths)
Inheritance
Aliasing
METHODS
init
This class method initializes the Template::Declare
system.
- roots
show TEMPLATE_NAME
Call show
with a template_name
and Template::Declare
will render that template. Content generated by show can be accessed with the output
method if the output method you've chosen returns content instead of outputting it directly.
(If called in scalar context, this method will also just return the content when available).
alias
alias Some::Clever::Mixin under '/mixin';
import_templates
import_templates Wifty::UI::something under '/something';
path_for $template
Returns the path for the template name to be used for show, adjusted
with paths used in import_templates.
has_template PACKAGE TEMPLATE_NAME SHOW_PRIVATE
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.
This method is an alias for "resolve_template"
resolve_template TEMPLATE_PATH INCLUDE_PRIVATE_TEMPLATES
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 template we're looking for.
register_template PACKAGE TEMPLATE_NAME CODEREF
This method registers a template called TEMPLATE_NAME
in package PACKAGE
. As you might guess, CODEREF
defines the template's implementation.
register_template PACKAGE TEMPLATE_NAME CODEREF
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.
BUGS
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
If you run into bugs or misfeatures, please report them to bug-template-declare@rt.cpan.org
.
SEE ALSO
AUTHOR
Jesse Vincent <jesse@bestpractical.com>
COPYRIGHT
Copyright 2006-2007 Best Practical Solutions, LLC