package CGI::Application::Plugin::AnyTemplate::Driver::Petal; =head1 NAME CGI::Application::Plugin::AnyTemplate::Driver::Petal - Petal plugin to AnyTemplate =head1 DESCRIPTION This is a driver for L, which provides the implementation details specific to rendering templates via the L templating system. All C drivers are designed to be used the same way. For general usage instructions, see the documentation of L. =head1 EMBEDDED COMPONENT SYNTAX (Petal) B B >> tags.> var: The C syntax for embedding components is: this text gets replaced by the output of some_run_mode 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: this text gets replaced by the output of some_run_mode Note that when creating documents to be included as components, they must be complete XML documents. =cut use strict; use Carp; use CGI::Application::Plugin::AnyTemplate::ComponentHandler; use CGI::Application::Plugin::AnyTemplate::Base; use vars qw(@ISA); @ISA = ('CGI::Application::Plugin::AnyTemplate::Base'); =head1 CONFIGURATION The L driver accepts the following config parameters: =over 4 =item embed_tag_name The name of the tag used for embedding components. Defaults to C. =item template_extension If C is true, then L will append the value of C to C. By default the C is C<.xhtml>. =item emulate_associate_query B If this config parameter is true, then L will copy all of the webapp's query params into the template. This is similar to what would happen if you used L's C feature with the webapp's query object: my $driver = HTML::Template->new( associate => $self->query, ); By default C is false. =back All other configuration parameters are passed on unchanged to L. =cut sub driver_config_keys { qw/ embed_tag_name template_extension emulate_associate_query /; } sub default_driver_config { ( template_extension => '.xhtml', embed_tag_name => 'CGIAPP', emulate_associate_query => 0, ); } =head2 required_modules The C function returns the modules required for this driver to operate. In this case: C. =cut sub required_modules { return qw( Petal ); } =head1 DRIVER METHODS =over 4 =item initialize Initializes the L driver. See the docs for L for details. =cut # create the Petal object, # using: # $self->{'driver_config'} # config info # $self->{'include_paths'} # the paths to search for the template file # $self->filename # the template file sub initialize { my $self = shift; $self->_require_prerequisite_modules; # TODO: check out how Petal caching works my %config = %{ $self->{'native_config'}}; $config{'base_dir'} = $self->{'include_paths'}; my $filename = $self->filename; my $string_ref = $self->string_ref; my $driver; if ($filename) { $config{'file'} = $filename; $driver = Petal->new(%config); } elsif ($string_ref) { croak "Petal: creating templates from strings is not supported in Petal"; } else { croak "Petal: either file or string must be specified"; } $self->{'driver'} = $driver; } =item render_template Fills the L object with C<< $self->param >> If the param C is true, then set params for each of $self->{'webapp'}->query, mimicking L's associate mechanism. Also set up a L object so that the C callback will work. Returns the output of the filled template as a string reference. See the docs for L for details. =back =cut sub render_template { my $self = shift; my $driver_config = $self->{'driver_config'}; my $template = $self->{'driver'}; # emulate HTML::Template's 'associate' behaviour if ($driver_config->{'emulate_associate_query'}) { my $params = $self->get_param_hash; if ($self->{'webapp'}) { foreach ($self->{'webapp'}->query->param) { $params->{$_} ||= $self->{'webapp'}->query->param($_); } } } my $component_handler = $self->{'component_handler_class'}->new( 'webapp' => $self->{'webapp'}, 'containing_template' => $self, ); my $params = $self->get_param_hash; $params->{$driver_config->{'embed_tag_name'}} = $component_handler; my $output = $template->process($params) || croak $template->error; return \$output; } =head1 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::TemplateToolkit 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 =head1 AUTHOR Michael Graham, C<< >> =head1 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. =cut 1;