Provided by: libcgi-application-plugin-anytemplate-perl_0.18-2_all bug

NAME

       CGI::Application::Plugin::AnyTemplate::Driver::TemplateToolkit - Template::Toolkit plugin to AnyTemplate

DESCRIPTION

       This is a driver for CGI::Application::Plugin::AnyTemplate, which provides the implementation details
       specific to rendering templates via the Template::Toolkit templating system.

       All "AnyTemplate" drivers are designed to be used the same way.  For general usage instructions, see the
       documentation of CGI::Application::Plugin::AnyTemplate.

EMBEDDED COMPONENT SYNTAX (Template::Toolkit)

       The Template::Toolkit syntax for embedding components is:

           [% CGIAPP.embed("some_run_mode", param1, param2, 'literal string3') %]

       This can be overridden by the following configuration variables:

           embed_tag_name       # default 'CGIAPP'

       For instance by setting the following values in your configuration file:

           embed_tag_name       'MYAPP'

       Then the embedded component tag will look like:

           [% MYAPP.embed("some_run_mode") %]

TT OBJECT CACHING (singleton support)

   Introduction
       In a persistent environment, rather than creating a Template::Toolkit object each time you fill a
       template, it is much more efficient to load a single Template::Toolkit object and use this object to
       render all of your templates.

       However, in a persistent environment, you may have several different applications running, and they all
       might need to set different Template::Toolkit options (such as "POST_CHOMP", etc.).

       By default, when the "TemplateToolkit" driver creates a Template::Toolkit object, it caches it.  From
       that point on, whenever the same application needs a Template::Toolkit object, the driver uses the cached
       object rather than creating a new one.

   Multiple Applications in a Shared Persistent Environment
       An attempt is made to prevent different applications from sharing the same TT object.

       Internally, the TT objects are stored in a private hash keyed by the web application's class name.

       You can explicitly specify the class name when you call "config":

               $self->template->config(
                   type          => 'TemplateToolkit',
                   TemplateToolkit => {
                       storage_class => 'My::Project',
                   },
               );

       If you don't specify the class name, then the package containing the subroutine that called "config" is
       used.  For instance:

           package My::Project;
           sub setup {
               my $self = shift;
               $self->template->config(                 # My::Project is used to store
                   type          => 'TemplateToolkit',  # cached TT object
               );
           }

       A typical "CGI::Application" module hierarchy looks like this:

           CGI::Application
               My::Project
                   My::Webapp

       In this hierarchy, it makes sense to store the cached TT object in "My::Project".  To make this happen,
       either call "$self->template->config" from within "My::Project", or explicitly name the "storage_class"
       when you call "$self->template->config".

   Disabling TT Object Caching
       You can disable Template::Toolkit object caching entirely by providing a false value to the
       "object_caching" driver config parameter:

               $self->template->config(
                   type          => 'TemplateToolkit',
                   TemplateToolkit => {
                       object_caching => 0,
                   },
               );

   TT Object Caching and Include Paths
       The "include_paths" driver config parameter is not cached; it is set every time you call
       "$self->template->load". So you can safely used cached TT objects even if the applications sharing the TT
       object need different "include_paths".

CONFIGURATION

       The CGI::Application::Plugin::AnyTemplate::Driver::TemplateToolkit driver accepts the following config
       parameters:

       embed_tag_name
           The name of the tag used for embedding components.  Defaults to "CGIAPP".

       template_extension
           If "auto_add_template_extension" is true, then CGI::Application::Plugin::AnyTemplate will append the
           value of "template_extension" to "filename".  By default the "template_extension" is ".xhtml".

       emulate_associate_query
           This feature is now deprecated and will be removed in a future release.

           If this config parameter is true, then CGI::Application::Plugin::AnyTemplate::Driver::TemplateToolkit
           will copy all of the webapp's query params into the template.

           This is similar to what would happen if you used HTML::Template's "associate" feature with the
           webapp's query object:

               my $driver = HTML::Template->new(
                   associate => $self->query,
               );

           By default "emulate_associate_query" is false.

       object_caching
           Whether or not to cache the Template::Toolkit object in a persistent environment

           By default, "object_caching" is enabled.

           See "TT OBJECT CACHING (singleton support)", above.

       storage_class
           What class to use as the storage key when object caching is enabled.

           By default, "storage_class" defaults to the package containing the subroutine that called
           "$self->template->config".

           See "TT OBJECT CACHING (singleton support)", above.

       All other configuration parameters are passed on unchanged to Template::Toolkit.

CONFIGURING UTF-8 TEMPLATES

       "AnyTemplate" does NOT support Template::Toolkit's "binmode" option at runtime:

           # not possible with AnyTemplate
           $tt->process($infile, $vars, $outfile, { binmode => 1 })
               || die $tt->error(), "\n";

           # not possible with AnyTemplate
           $tt->process($infile, $vars, $outfile, binmode => 1)
               || die $tt->error(), "\n";

           # not possible with AnyTemplate
           $tt->process($infile, $vars, $outfile, binmode => ':utf8')
               || die $tt->error(), "\n";

       Instead, use the "ENCODING" option in the initial config:

           $self->template->config(
               default_type => 'TemplateToolkit',
               TemplateToolkit => {
                   ENCODING => 'UTF-8'
               }
           );

       If you have a mix of encodings in your templates, use a separate "AnyTemplate" configuration for each
       encoding:

           $self->template('ascii')->config(
               default_type => 'TemplateToolkit',
           );
           $self->template('utf-8')->config(
               default_type => 'TemplateToolkit',
               TemplateToolkit => {
                   ENCODING => 'UTF-8'
               }
           );

   required_modules
       The "required_modules" function returns the modules required for this driver to operate.  In this case:
       "Template".

DRIVER METHODS

       initialize
           Initializes the "TemplateToolkit" driver.  See the docs for
           CGI::Application::Plugin::AnyTemplate::Base for details.

       render_template
           Fills the Template::Toolkit object with "$self->param"

           If the param "emulate_associate_query" is true, then set params for each of $self->{'webapp'}->query,
           mimicking HTML::Template's associate mechanism.

           Also set up a CGI::Application::Plugin::AnyTemplate::ComponentHandler object so that the
           "CGIAPP.embed" callback will work.

           Returns the output of the filled template as a string reference.

           See the docs for CGI::Application::Plugin::AnyTemplate::Base for details.

SEE ALSO

           CGI::Application::Plugin::AnyTemplate
           CGI::Application::Plugin::AnyTemplate::Base
           CGI::Application::Plugin::AnyTemplate::ComponentHandler
           CGI::Application::Plugin::AnyTemplate::Driver::HTMLTemplate
           CGI::Application::Plugin::AnyTemplate::Driver::HTMLTemplateExpr
           CGI::Application::Plugin::AnyTemplate::Driver::HTMLTemplatePluggable
           CGI::Application::Plugin::AnyTemplate::Driver::Petal

           CGI::Application

           Template::Toolkit
           HTML::Template

           HTML::Template::Pluggable
           HTML::Template::Plugin::Dot

           Petal

           Exporter::Renaming

           CGI::Application::Plugin::TT

ACKNOWLEDGEMENTS

       Thanks to Cees Hek for discussing the issues of caching in a persistent environment.  And also for his
       excellent CGI::Application::Plugin::TT module, from which I stole ideas and some code:  especially the
       bit about how to change the include path in a TT object after you've initialized it.

AUTHOR

       Michael Graham, "<mgraham@cpan.org>"

COPYRIGHT & LICENSE

       Copyright 2005 Michael Graham, All Rights Reserved.

       This program is free software; you can redistribute it and/or modify it under the same terms as Perl
       itself.

perl v5.20.2                                 CGI::Application::Plugin::AnyTemplate::Driver::TemplateToolkit(3pm)