|
NAMECGI::Application::Plugin::AnyTemplate::Driver::TemplateToolkit - Template::Toolkit plugin to AnyTemplate DESCRIPTIONThis 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)IntroductionIn 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 EnvironmentAn 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 CachingYou 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 PathsThe "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". CONFIGURATIONThe CGI::Application::Plugin::AnyTemplate::Driver::TemplateToolkit driver accepts the following config parameters:
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_modulesThe "required_modules" function returns the modules required for this driver to operate. In this case: "Template". DRIVER METHODS
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
ACKNOWLEDGEMENTSThanks 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. AUTHORMichael Graham, "<mgraham@cpan.org>" COPYRIGHT & LICENSECopyright 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.
|