# man > CGI::FormBuilder::Template

---
type: CommandReference
command: CGI::FormBuilder::Template
mode: perldoc
section: 3pm
source: perldoc
---

## Quick Reference
- `$form->new(template => 'file.tmpl')` — Use a template file for HTML layout.
- `$form->new(template => { filename => 'form.tmpl', shared_cache => 1 })` — Enable HTML::Template caching.
- `$form->new(template => { type => 'TT2', template => 'form.tmpl' })` — Use Template Toolkit engine.
- `$form->new(template => { type => 'My::Template::Module', template => 'form.tmpl' })` — Load custom template engine.
- `package My::HTML::Template; use base 'CGI::FormBuilder::Template::HTML'; sub render { ... }` — Subclass to create a custom adapter.
- `my $tmpl = My::HTML::Template->new; $form->new(template => $tmpl)` — Pass a pre-instantiated template object.

## Name
CGI::FormBuilder::Template - Template adapters for FormBuilder

## Synopsis
A template engine adapter is created by subclassing one of the built-in engines or writing a new `render()` method.

perl
package CGI::FormBuilder::Template::Whatever;
use base 'Whatever::Template::Module';

sub new {
    my $self  = shift;
    my $class = ref($self) || $self;
    my %opt   = @_;
    $opt{some_setting} = 0;
    $opt{engine} = Whatever::Template::Module->new(%opt);
    return bless \%opt, $class;
}

sub render {
    my $self = shift;
    my $form = shift;
    my %tmplvar = $form->tmpl_param;
    my $html = $self->{engine}->do_template(%tmplvar);
    return $html;
}
1;
## Options
- `template` — String (filename) or hashref specifying template configuration.
  - `filename` — Template file path (HTML::Template engine).
  - `type` — Engine identifier: `Builtin`, `Div`, `HTML`, `Text`, `TT2`, `Fast`, `CGI_SSI`, or a full package name.
  - `template` — Template file/content (used by TT2 and others).
  - `shared_cache` — (HTML::Template) Enable shared cache.
  - Other options passed directly to the template engine constructor.

## Examples
**Basic template file usage:**
perl
my $form = CGI::FormBuilder->new(
    fields   => \@fields,
    template => 'form.tmpl'
);
**Advanced options with hashref:**
perl
my $form = CGI::FormBuilder->new(
    fields => \@fields,
    template => {
        filename => 'form.tmpl',
        shared_cache => 1
    }
);
**Using Template Toolkit:**
perl
my $form = CGI::FormBuilder->new(
    fields => \@fields,
    template => {
        type => 'TT2',
        template => 'form.tmpl',
    }
);
**Custom engine subclass and usage:**
perl
package My::HTML::Template;
use base 'CGI::FormBuilder::Template::HTML';

sub render {
    my $self = shift;
    my $form = shift;
    my $tmpl = $self->engine;
    for ($form->field) {
        $tmpl->param($_ => $_->value);
    }
    return $tmpl->output;
}
1;

# Usage:
use My::HTML::Template;
my $tmpl = My::HTML::Template->new;
my $form = CGI::FormBuilder->new(
    fields   => [qw(name email)],
    header   => 1,
    template => $tmpl
);
$tmpl->engine->param(company => $form->cgi_param('company'));
print $form->render;
## See Also
- [CGI::FormBuilder](http://localhost/phpMan.php/perldoc/CGI::FormBuilder/markdown)
- [CGI::FormBuilder::Template::HTML](http://localhost/phpMan.php/perldoc/CGI::FormBuilder::Template::HTML/markdown)
- [CGI::FormBuilder::Template::Text](http://localhost/phpMan.php/perldoc/CGI::FormBuilder::Template::Text/markdown)
- [CGI::FormBuilder::Template::TT2](http://localhost/phpMan.php/perldoc/CGI::FormBuilder::Template::TT2/markdown)
- [CGI::FormBuilder::Template::Fast](http://localhost/phpMan.php/perldoc/CGI::FormBuilder::Template::Fast/markdown)
- [CGI::FormBuilder::Template::CGI_SSI](http://localhost/phpMan.php/perldoc/CGI::FormBuilder::Template::CGISSI/markdown)