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-
      [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)