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&#39;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-
       plate-declare@rt.cpan.org".

SSEEEE AALLSSOO
       Jifty

AAUUTTHHOORR
       Jesse Vincent <jesse@bestpractical.com>

CCOOPPYYRRIIGGHHTT
       Copyright 2006-2007 Best Practical Solutions, LLC



perl v5.8.8                       2007-01-18              Template::Declare(3)