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: # # # #
# #Hello, world wide web! #
# # 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: # # # #Hello, world wide web! #
# # 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- plate-declare@rt.cpan.org". SSEEEE AALLSSOO Jifty AAUUTTHHOORR Jesse Vincent