-
-
18 Oct 2009 18:54:38 UTC
- Distribution: CGI-Application-Plugin-AnyTemplate
- Source (raw)
- Browse (raw)
- Changes
- How to Contribute
- Issues (3)
- Testers (792 / 3 / 0)
- Kwalitee
Bus factor: 0- 78.67% Coverage
- License: perl_5
- Activity
24 month- Tools
- Download (73.41KB)
- MetaCPAN Explorer
- Permissions
- Subscribe to distribution
- Permalinks
- This version
- Latest version
++ed by:1 non-PAUSE user- Dependencies
- CGI::Application
- CGI::Application::Plugin::Forward
- Clone
- Scalar::Util
- Test::More
- and possibly others
- Reverse dependencies
- CPAN Testers List
- Dependency graph
- NAME
- DESCRIPTION
- EMBEDDED COMPONENT SYNTAX (Template::Toolkit)
- TT OBJECT CACHING (singleton support)
- CONFIGURATION
- CONFIGURING UTF-8 TEMPLATES
- DRIVER METHODS
- SEE ALSO
- ACKNOWLEDGEMENTS
- AUTHOR
- COPYRIGHT & LICENSE
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 withinMy::Project
, or explicitly name thestorage_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 differentinclude_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 oftemplate_extension
tofilename
. By default thetemplate_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'sbinmode
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.
Module Install Instructions
To install CGI::Application::Plugin::AnyTemplate, copy and paste the appropriate command in to your terminal.
cpanm CGI::Application::Plugin::AnyTemplate
perl -MCPAN -e shell install CGI::Application::Plugin::AnyTemplate
For more information on module installation, please visit the detailed CPAN module installation guide.