CGI::Application::Plugin::AnyTemplate::Driver::HTMLTemplateExpr - HTML::Template::Expr driver to AnyTemplate


CGI-Application-Plugin-AnyTemplate documentation Contained in the CGI-Application-Plugin-AnyTemplate distribution.

Index


Code Index:

NAME

Top

CGI::Application::Plugin::AnyTemplate::Driver::HTMLTemplateExpr - HTML::Template::Expr driver to AnyTemplate

DESCRIPTION

Top

This is a driver for CGI::Application::Plugin::AnyTemplate, which provides the implementation details specific to rendering templates via the HTML::Template::Expr 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 (HTML::Template::Expr)

Top

Syntax

The HTML::Template::Expr syntax for embedding components is:

    <TMPL_VAR EXPR="CGIAPP_embed('some_run_mode', param1, param2, 'literal string3')">

This can be overridden by the following configuration variables:

    embed_tag_name       # default 'CGIAPP_embed'

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

    embed_tag_name       '__ACME_render'

Then the embedded component tag will look like:

    <TMPL_VAR EXPR="__ACME_render('some_run_mode')">

The value of embed_tag_name must consist of numbers, letters and underscores (_), and must not begin with a number.

CONFIGURATION

Top

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

embed_tag_name

The name of the tag used for embedding components. Defaults to CGIAPP_embed.

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 .html.

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::HTMLTemplateExpr will copy all of the webapp's query params into the template using HTML::Template::Expr's associate mechanism:

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

By default associate_query is false.

If you provide an associate config parameter of your own, that will disable the associate_query functionality.

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

required_modules

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

DRIVER METHODS

Top

initialize

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

render_template

Fills the HTML::Template::Expr object with $self->param, and returns the output (as a string reference).

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

SEE ALSO

Top

    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::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

AUTHOR

Top

Michael Graham, <mgraham@cpan.org>

COPYRIGHT & LICENSE

Top


CGI-Application-Plugin-AnyTemplate documentation Contained in the CGI-Application-Plugin-AnyTemplate distribution.
package CGI::Application::Plugin::AnyTemplate::Driver::HTMLTemplateExpr;

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');

sub driver_config_keys {
    qw/
       embed_tag_name
       template_extension
       associate_query
    /;
}

sub default_driver_config {
    (
        template_extension => '.html',
        embed_tag_name     => 'CGIAPP_embed',
        associate_query    => 0,
    );
}

sub required_modules {
    return qw(
        HTML::Template::Expr
    );
}


# create the HTML::Template::Expr object,
# using:
#   $self->{'driver_config'}  # config info
#   $self->{'include_paths'}  # the paths to search for the template file
#   $self->filename           # the template file
#   $self->{'webapp'}->query  # for HTML::Template::Expr's 'associate' method,
#                             # so that the query params are included
#                             # in the template output
sub initialize {
    my $self = shift;

    $self->_require_prerequisite_modules;

    my $string_ref = $self->string_ref;
    my $filename   = $self->filename;

    $string_ref or $filename or croak "HTML::Template file or string must be specified";

    my $query    = $self->{'webapp'}->query or croak "HTML::Template::Expr webapp query not found";

    my $component_handler = $self->{'component_handler_class'}->new(
        'webapp'              => $self->{'webapp'},
        'containing_template' => $self,
    );

    my %params = (
        %{ $self->{'native_config'} },
        path      => $self->{'include_paths'},
        functions => {
            $self->{'driver_config'}{'embed_tag_name'} => sub { $component_handler->embed(@_) },
        }
    );

    if ($filename) {
        $params{'filename'} = $filename;
    }
    if ($string_ref) {
        $params{'scalarref'} = $string_ref;
    }

    if ($self->{'driver_config'}{'associate_query'}) {
        $params{'associate'} ||= $query;  # allow user to override associate with their own
    }
    my $driver = HTML::Template::Expr->new(%params);

    $self->{'driver'} = $driver;

}

# If we have already called output, then any stored params have already
# been stored in the driver.  So when the user calls clear_params on the
# AT object, we have to call clear_params on the driver as well.

sub clear_params {
    my $self = shift;

    if ($self->{'driver'}) {
        $self->{'driver'}->clear_params;
    }
    $self->SUPER::clear_params;
}

sub render_template {
    my $self = shift;

    my $driver_config             = $self->{'driver_config'};

    # fill the template
    my $template = $self->{'driver'};

    $template->param(scalar $self->get_param_hash);
    my $output = $template->output;
    return \$output;
}

1;