1Template::Manual::ConfiUgs(e3r)Contributed Perl DocumentTaetmipolnate::Manual::Config(3)
2
3
4
6 Template::Manual::Config - Configuration options
7
9 START_TAG, END_TAG
10 The "START_TAG" and "END_TAG" options are used to specify character
11 sequences or regular expressions that mark the start and end of a
12 template directive. The default values for "START_TAG" and "END_TAG"
13 are '"[%"' and '"%]"' respectively, giving us the familiar directive
14 style:
15
16 [% example %]
17
18 Any Perl regex characters can be used and therefore should be escaped
19 (or use the Perl "quotemeta" function) if they are intended to
20 represent literal characters.
21
22 my $template = Template->new({
23 START_TAG => quotemeta('<+'),
24 END_TAG => quotemeta('+>'),
25 });
26
27 Example:
28
29 <+ INCLUDE foobar +>
30
31 The "TAGS" directive can also be used to set the "START_TAG" and
32 "END_TAG" values on a per-template file basis.
33
34 [% TAGS <+ +> %]
35
36 TAG_STYLE
37 The "TAG_STYLE" option can be used to set both "START_TAG" and
38 "END_TAG" according to pre-defined tag styles.
39
40 my $template = Template->new({
41 TAG_STYLE => 'star',
42 });
43
44 Available styles are:
45
46 template [% ... %] (default)
47 template1 [% ... %] or %% ... %% (TT version 1)
48 metatext %% ... %% (Text::MetaText)
49 star [* ... *] (TT alternate)
50 php <? ... ?> (PHP)
51 asp <% ... %> (ASP)
52 mason <% ... > (HTML::Mason)
53 html <!-- ... --> (HTML comments)
54
55 Any values specified for "START_TAG" and/or "END_TAG" will override
56 those defined by a "TAG_STYLE".
57
58 The "TAGS" directive may also be used to set a "TAG_STYLE"
59
60 [% TAGS html %]
61 <!-- INCLUDE header -->
62
63 PRE_CHOMP, POST_CHOMP
64 Anything outside a directive tag is considered plain text and is
65 generally passed through unaltered (but see the INTERPOLATE option).
66 This includes all whitespace and newlines characters surrounding
67 directive tags. Directives that don't generate any output will leave
68 gaps in the output document.
69
70 Example:
71
72 Foo
73 [% a = 10 %]
74 Bar
75
76 Output:
77
78 Foo
79
80 Bar
81
82 The "PRE_CHOMP" and "POST_CHOMP" options can help to clean up some of
83 this extraneous whitespace. Both are disabled by default.
84
85 my $template = Template-E<gt>new({
86 PRE_CHOMP => 1,
87 POST_CHOMP => 1,
88 });
89
90 With "PRE_CHOMP" set to 1, the newline and whitespace preceding a
91 directive at the start of a line will be deleted. This has the effect
92 of concatenating a line that starts with a directive onto the end of
93 the previous line.
94
95 Foo <----------.
96 |
97 ,---(PRE_CHOMP)----'
98 |
99 `-- [% a = 10 %] --.
100 |
101 ,---(POST_CHOMP)---'
102 |
103 `-> Bar
104
105 With "POST_CHOMP" set to 1, any whitespace after a directive up to and
106 including the newline will be deleted. This has the effect of joining
107 a line that ends with a directive onto the start of the next line.
108
109 If "PRE_CHOMP" or "POST_CHOMP" is set to 2, all whitespace including
110 any number of newline will be removed and replaced with a single space.
111 This is useful for HTML, where (usually) a contiguous block of
112 whitespace is rendered the same as a single space.
113
114 With "PRE_CHOMP" or "POST_CHOMP" set to 3, all adjacent whitespace
115 (including newlines) will be removed entirely.
116
117 These values are defined as "CHOMP_NONE", "CHOMP_ONE", "CHOMP_COLLAPSE"
118 and "CHOMP_GREEDY" constants in the Template::Constants module.
119 "CHOMP_ALL" is also defined as an alias for "CHOMP_ONE" to provide
120 backwards compatability with earlier version of the Template Toolkit.
121
122 Additionally the chomp tag modifiers listed below may also be used for
123 the "PRE_CHOMP" and "POST_CHOMP" configuration.
124
125 my $template = Template->new({
126 PRE_CHOMP => '~',
127 POST_CHOMP => '-',
128 });
129
130 "PRE_CHOMP" and "POST_CHOMP" can be activated for individual directives
131 by placing a '"-"' immediately at the start and/or end of the
132 directive.
133
134 [% FOREACH user IN userlist %]
135 [%- user -%]
136 [% END %]
137
138 This has the same effect as "CHOMP_ONE" in removing all whitespace
139 before or after the directive up to and including the newline. The
140 template will be processed as if written:
141
142 [% FOREACH user IN userlist %][% user %][% END %]
143
144 To remove all whitespace including any number of newlines, use the
145 '"~"' character instead.
146
147 [% FOREACH user IN userlist %]
148
149 [%~ user ~%]
150
151 [% END %]
152
153 To collapse all whitespace to a single space, use the '"="' character.
154
155 [% FOREACH user IN userlist %]
156
157 [%= user =%]
158
159 [% END %]
160
161 Here the template is processed as if written:
162
163 [% FOREACH user IN userlist %] [% user %] [% END %]
164
165 If you have "PRE_CHOMP" or "POST_CHOMP" set as configuration options
166 then you can use '"+"' to disable any chomping options (i.e. leave the
167 whitespace intact) on a per-directive basis.
168
169 [% FOREACH user IN userlist %]
170 User: [% user +%]
171 [% END %]
172
173 With "POST_CHOMP" set to "CHOMP_ONE", the above example would be parsed
174 as if written:
175
176 [% FOREACH user IN userlist %]User: [% user %]
177 [% END %]
178
179 For reference, the "PRE_CHOMP" and "POST_CHOMP" configuration options
180 may be set to any of the following:
181
182 Constant Value Tag Modifier
183 ----------------------------------
184 CHOMP_NONE 0 +
185 CHOMP_ONE 1 -
186 CHOMP_COLLAPSE 2 =
187 CHOMP_GREEDY 3 ~
188
189 TRIM
190 The "TRIM" option can be set to have any leading and trailing
191 whitespace automatically removed from the output of all template files
192 and "BLOCK"s.
193
194 By example, the following "BLOCK" definition
195
196 [% BLOCK foo %]
197 Line 1 of foo
198 [% END %]
199
200 will be processed is as ""\nLine 1 of foo\n"". When "INCLUDE"d, the
201 surrounding newlines will also be introduced.
202
203 before
204 [% INCLUDE foo %]
205 after
206
207 Generated output:
208
209 before
210
211 Line 1 of foo
212
213 after
214
215 With the "TRIM" option set to any true value, the leading and trailing
216 newlines (which count as whitespace) will be removed from the output of
217 the "BLOCK".
218
219 before
220 Line 1 of foo
221 after
222
223 The "TRIM" option is disabled (0) by default.
224
225 INTERPOLATE
226 The "INTERPOLATE" flag, when set to any true value will cause variable
227 references in plain text (i.e. not surrounded by "START_TAG" and
228 "END_TAG") to be recognised and interpolated accordingly.
229
230 my $template = Template->new({
231 INTERPOLATE => 1,
232 });
233
234 Variables should be prefixed by a '"$"' to identify them. Curly braces
235 can be used in the familiar Perl/shell style to explicitly scope the
236 variable name where required.
237
238 # INTERPOLATE => 0
239 <a href="http://[% server %]/[% help %]">
240 <img src="[% images %]/help.gif"></a>
241 [% myorg.name %]
242
243 # INTERPOLATE => 1
244 <a href="http://$server/$help">
245 <img src="$images/help.gif"></a>
246 $myorg.name
247
248 # explicit scoping with { }
249 <img src="$images/${icon.next}.gif">
250
251 Note that a limitation in Perl's regex engine restricts the maximum
252 length of an interpolated template to around 32 kilobytes or possibly
253 less. Files that exceed this limit in size will typically cause Perl
254 to dump core with a segmentation fault. If you routinely process
255 templates of this size then you should disable "INTERPOLATE" or split
256 the templates in several smaller files or blocks which can then be
257 joined backed together via "PROCESS" or "INCLUDE".
258
259 ANYCASE
260 By default, directive keywords should be expressed in UPPER CASE. The
261 "ANYCASE" option can be set to allow directive keywords to be specified
262 in any case.
263
264 # ANYCASE => 0 (default)
265 [% INCLUDE foobar %] # OK
266 [% include foobar %] # ERROR
267 [% include = 10 %] # OK, 'include' is a variable
268
269 # ANYCASE => 1
270 [% INCLUDE foobar %] # OK
271 [% include foobar %] # OK
272 [% include = 10 %] # ERROR, 'include' is reserved word
273
274 One side-effect of enabling "ANYCASE" is that you cannot use a variable
275 of the same name as a reserved word, regardless of case. The reserved
276 words are currently:
277
278 GET CALL SET DEFAULT INSERT INCLUDE PROCESS WRAPPER
279 IF UNLESS ELSE ELSIF FOR FOREACH WHILE SWITCH CASE
280 USE PLUGIN FILTER MACRO PERL RAWPERL BLOCK META
281 TRY THROW CATCH FINAL NEXT LAST BREAK RETURN STOP
282 CLEAR TO STEP AND OR NOT MOD DIV END
283
284 The only lower case reserved words that cannot be used for variables,
285 regardless of the "ANYCASE" option, are the operators:
286
287 and or not mod div
288
290 INCLUDE_PATH
291 The "INCLUDE_PATH" is used to specify one or more directories in which
292 template files are located. When a template is requested that isn't
293 defined locally as a "BLOCK", each of the "INCLUDE_PATH" directories is
294 searched in turn to locate the template file. Multiple directories can
295 be specified as a reference to a list or as a single string where each
296 directory is delimited by '":"'.
297
298 my $template = Template->new({
299 INCLUDE_PATH => '/usr/local/templates',
300 });
301
302 my $template = Template->new({
303 INCLUDE_PATH => '/usr/local/templates:/tmp/my/templates',
304 });
305
306 my $template = Template->new({
307 INCLUDE_PATH => [ '/usr/local/templates',
308 '/tmp/my/templates' ],
309 });
310
311 On Win32 systems, a little extra magic is invoked, ignoring delimiters
312 that have '":"' followed by a '"/"' or '"\"'. This avoids confusion
313 when using directory names like '"C:\Blah Blah"'.
314
315 When specified as a list, the "INCLUDE_PATH" path can contain elements
316 which dynamically generate a list of "INCLUDE_PATH" directories. These
317 generator elements can be specified as a reference to a subroutine or
318 an object which implements a "paths()" method.
319
320 my $template = Template->new({
321 INCLUDE_PATH => [ '/usr/local/templates',
322 \&incpath_generator,
323 My::IncPath::Generator->new( ... ) ],
324 });
325
326 Each time a template is requested and the "INCLUDE_PATH" examined, the
327 subroutine or object method will be called. A reference to a list of
328 directories should be returned. Generator subroutines should report
329 errors using "die()". Generator objects should return undef and make
330 an error available via its "error()" method.
331
332 For example:
333
334 sub incpath_generator {
335 # ...some code...
336
337 if ($all_is_well) {
338 return \@list_of_directories;
339 }
340 else {
341 die "cannot generate INCLUDE_PATH...\n";
342 }
343 }
344
345 or:
346
347 package My::IncPath::Generator;
348
349 # Template::Base (or Class::Base) provides error() method
350 use Template::Base;
351 use base qw( Template::Base );
352
353 sub paths {
354 my $self = shift;
355
356 # ...some code...
357
358 if ($all_is_well) {
359 return \@list_of_directories;
360 }
361 else {
362 return $self->error("cannot generate INCLUDE_PATH...\n");
363 }
364 }
365
366 1;
367
368 DELIMITER
369 Used to provide an alternative delimiter character sequence for
370 separating paths specified in the "INCLUDE_PATH". The default value
371 for "DELIMITER" is '":"'.
372
373 my $template = Template->new({
374 DELIMITER => '; ',
375 INCLUDE_PATH => 'C:/HERE/NOW; D:/THERE/THEN',
376 });
377
378 On Win32 systems, the default delimiter is a little more intelligent,
379 splitting paths only on '":"' characters that aren't followed by a
380 '"/"'. This means that the following should work as planned, splitting
381 the "INCLUDE_PATH" into 2 separate directories, "C:/foo" and "C:/bar".
382
383 # on Win32 only
384 my $template = Template->new({
385 INCLUDE_PATH => 'C:/Foo:C:/Bar'
386 });
387
388 However, if you're using Win32 then it's recommended that you
389 explicitly set the "DELIMITER" character to something else (e.g. '";"')
390 rather than rely on this subtle magic.
391
392 ABSOLUTE
393 The "ABSOLUTE" flag is used to indicate if templates specified with
394 absolute filenames (e.g. '"/foo/bar"') should be processed. It is
395 disabled by default and any attempt to load a template by such a name
396 will cause a '"file"' exception to be raised.
397
398 my $template = Template->new({
399 ABSOLUTE => 1,
400 });
401
402 # this is why it's disabled by default
403 [% INSERT /etc/passwd %]
404
405 On Win32 systems, the regular expression for matching absolute
406 pathnames is tweaked slightly to also detect filenames that start with
407 a driver letter and colon, such as:
408
409 C:/Foo/Bar
410
411 RELATIVE
412 The "RELATIVE" flag is used to indicate if templates specified with
413 filenames relative to the current directory (e.g. '"./foo/bar"' or
414 '"../../some/where/else"') should be loaded. It is also disabled by
415 default, and will raise a '"file"' error if such template names are
416 encountered.
417
418 my $template = Template->new({
419 RELATIVE => 1,
420 });
421
422 [% INCLUDE ../logs/error.log %]
423
424 DEFAULT
425 The "DEFAULT" option can be used to specify a default template which
426 should be used whenever a specified template can't be found in the
427 "INCLUDE_PATH".
428
429 my $template = Template->new({
430 DEFAULT => 'notfound.html',
431 });
432
433 If a non-existant template is requested through the Template process()
434 method, or by an "INCLUDE", "PROCESS" or "WRAPPER" directive, then the
435 "DEFAULT" template will instead be processed, if defined. Note that the
436 "DEFAULT" template is not used when templates are specified with
437 absolute or relative filenames, or as a reference to a input file
438 handle or text string.
439
440 BLOCKS
441 The "BLOCKS" option can be used to pre-define a default set of template
442 blocks. These should be specified as a reference to a hash array
443 mapping template names to template text, subroutines or
444 Template::Document objects.
445
446 my $template = Template->new({
447 BLOCKS => {
448 header => 'The Header. [% title %]',
449 footer => sub { return $some_output_text },
450 another => Template::Document->new({ ... }),
451 },
452 });
453
454 VIEWS
455 The VIEWS option can be used to define one or more Template::View
456 objects. They can be specified as a reference to a hash array or list
457 reference.
458
459 my $template = Template->new({
460 VIEWS => {
461 my_view => { prefix => 'my_templates/' },
462 },
463 });
464
465 Be aware of the fact that Perl's hash array are unordered, so if you
466 want to specify multiple views of which one or more are based on other
467 views, then you should use a list reference to preserve the order of
468 definition.
469
470 my $template = Template->new({
471 VIEWS => [
472 bottom => { prefix => 'bottom/' },
473 middle => { prefix => 'middle/', base => 'bottom' },
474 top => { prefix => 'top/', base => 'middle' },
475 ],
476 });
477
478 AUTO_RESET
479 The "AUTO_RESET" option is set by default and causes the local "BLOCKS"
480 cache for the Template::Context object to be reset on each call to the
481 Template process() method. This ensures that any "BLOCK"s defined
482 within a template will only persist until that template is finished
483 processing. This prevents "BLOCK"s defined in one processing request
484 from interfering with other independent requests subsequently processed
485 by the same context object.
486
487 The "BLOCKS" item may be used to specify a default set of block
488 definitions for the Template::Context object. Subsequent "BLOCK"
489 definitions in templates will over-ride these but they will be
490 reinstated on each reset if "AUTO_RESET" is enabled (default), or if
491 the Template::Context reset() method is called.
492
493 RECURSION
494 The template processor will raise a file exception if it detects direct
495 or indirect recursion into a template. Setting this option to any true
496 value will allow templates to include each other recursively.
497
499 VARIABLES
500 The "VARIABLES" option (or "PRE_DEFINE" - they're equivalent) can be
501 used to specify a hash array of template variables that should be used
502 to pre-initialise the stash when it is created. These items are
503 ignored if the "STASH" item is defined.
504
505 my $template = Template->new({
506 VARIABLES => {
507 title => 'A Demo Page',
508 author => 'Joe Random Hacker',
509 version => 3.14,
510 },
511 };
512
513 or
514
515 my $template = Template->new({
516 PRE_DEFINE => {
517 title => 'A Demo Page',
518 author => 'Joe Random Hacker',
519 version => 3.14,
520 },
521 };
522
523 CONSTANTS
524 The "CONSTANTS" option can be used to specify a hash array of template
525 variables that are compile-time constants. These variables are
526 resolved once when the template is compiled, and thus don't require
527 further resolution at runtime. This results in significantly faster
528 processing of the compiled templates and can be used for variables that
529 don't change from one request to the next.
530
531 my $template = Template->new({
532 CONSTANTS => {
533 title => 'A Demo Page',
534 author => 'Joe Random Hacker',
535 version => 3.14,
536 },
537 };
538
539 CONSTANT_NAMESPACE
540 Constant variables are accessed via the "constants" namespace by
541 default.
542
543 [% constants.title %]
544
545 The "CONSTANTS_NAMESPACE" option can be set to specify an alternate
546 namespace.
547
548 my $template = Template->new({
549 CONSTANTS => {
550 title => 'A Demo Page',
551 # ...etc...
552 },
553 CONSTANTS_NAMESPACE => 'const',
554 };
555
556 In this case the constants would then be accessed as:
557
558 [% const.title %]
559
560 NAMESPACE
561 The constant folding mechanism described above is an example of a
562 namespace handler. Namespace handlers can be defined to provide
563 alternate parsing mechanisms for variables in different namespaces.
564
565 Under the hood, the Template module converts a constructor
566 configuration such as:
567
568 my $template = Template->new({
569 CONSTANTS => {
570 title => 'A Demo Page',
571 # ...etc...
572 },
573 CONSTANTS_NAMESPACE => 'const',
574 };
575
576 into one like:
577
578 my $template = Template->new({
579 NAMESPACE => {
580 const => Template:::Namespace::Constants->new({
581 title => 'A Demo Page',
582 # ...etc...
583 }),
584 },
585 };
586
587 You can use this mechanism to define multiple constant namespaces, or
588 to install custom handlers of your own.
589
590 my $template = Template->new({
591 NAMESPACE => {
592 site => Template:::Namespace::Constants->new({
593 title => "Wardley's Widgets",
594 version => 2.718,
595 }),
596 author => Template:::Namespace::Constants->new({
597 name => 'Andy Wardley',
598 email => 'abw@andywardley.com',
599 }),
600 voodoo => My::Namespace::Handler->new( ... ),
601 },
602 };
603
604 Now you have two constant namespaces, for example:
605
606 [% site.title %]
607 [% author.name %]
608
609 as well as your own custom namespace handler installed for the 'voodoo'
610 namespace.
611
612 [% voodoo.magic %]
613
614 See Template::Namespace::Constants for an example of what a namespace
615 handler looks like on the inside.
616
618 The following options are used to specify any additional templates that
619 should be processed before, after, around or instead of the template
620 passed as the first argument to the Template process() method. These
621 options can be perform various useful tasks such as adding standard
622 headers or footers to all pages, wrapping page output in other
623 templates, pre-defining variables or performing initialisation or
624 cleanup tasks, automatically generating page summary information,
625 navigation elements, and so on.
626
627 The task of processing the template is delegated internally to the
628 Template::Service module which, unsurprisingly, also has a process()
629 method. Any templates defined by the "PRE_PROCESS" option are processed
630 first and any output generated is added to the output buffer. Then the
631 main template is processed, or if one or more "PROCESS" templates are
632 defined then they are instead processed in turn. In this case, one of
633 the "PROCESS" templates is responsible for processing the main
634 template, by a directive such as:
635
636 [% PROCESS $template %]
637
638 The output of processing the main template or the "PROCESS" template(s)
639 is then wrapped in any "WRAPPER" templates, if defined. "WRAPPER"
640 templates don't need to worry about explicitly processing the template
641 because it will have been done for them already. Instead "WRAPPER"
642 templates access the content they are wrapping via the "content"
643 variable.
644
645 wrapper before
646 [% content %]
647 wrapper after
648
649 This output generated from processing the main template, and/or any
650 "PROCESS" or "WRAPPER" templates is added to the output buffer.
651 Finally, any "POST_PROCESS" templates are processed and their output is
652 also added to the output buffer which is then returned.
653
654 If the main template throws an exception during processing then any
655 relevant template(s) defined via the "ERROR" option will be processed
656 instead. If defined and successfully processed, the output from the
657 error template will be added to the output buffer in place of the
658 template that generated the error and processing will continue,
659 applying any "WRAPPER" and "POST_PROCESS" templates. If no relevant
660 "ERROR" option is defined, or if the error occurs in one of the
661 "PRE_PROCESS", "WRAPPER" or "POST_PROCESS" templates, then the process
662 will terminate immediately and the error will be returned.
663
664 PRE_PROCESS, POST_PROCESS
665 These values may be set to contain the name(s) of template files
666 (relative to "INCLUDE_PATH") which should be processed immediately
667 before and/or after each template. These do not get added to templates
668 processed into a document via directives such as "INCLUDE", "PROCESS",
669 "WRAPPER" etc.
670
671 my $template = Template->new({
672 PRE_PROCESS => 'header',
673 POST_PROCESS => 'footer',
674 };
675
676 Multiple templates may be specified as a reference to a list. Each is
677 processed in the order defined.
678
679 my $template = Template->new({
680 PRE_PROCESS => [ 'config', 'header' ],
681 POST_PROCESS => 'footer',
682 };
683
684 Alternately, multiple template may be specified as a single string,
685 delimited by '":"'. This delimiter string can be changed via the
686 "DELIMITER" option.
687
688 my $template = Template->new({
689 PRE_PROCESS => 'config:header',
690 POST_PROCESS => 'footer',
691 };
692
693 The "PRE_PROCESS" and "POST_PROCESS" templates are evaluated in the
694 same variable context as the main document and may define or update
695 variables for subsequent use.
696
697 config:
698
699 [% # set some site-wide variables
700 bgcolor = '#ffffff'
701 version = 2.718
702 %]
703
704 header:
705
706 [% DEFAULT title = 'My Funky Web Site' %]
707 <html>
708 <head>
709 <title>[% title %]</title>
710 </head>
711 <body bgcolor="[% bgcolor %]">
712
713 footer:
714
715 <hr>
716 Version [% version %]
717 </body>
718 </html>
719
720 The Template::Document object representing the main template being
721 processed is available within "PRE_PROCESS" and "POST_PROCESS"
722 templates as the "template" variable. Metadata items defined via the
723 "META" directive may be accessed accordingly.
724
725 $template->process('mydoc.html', $vars);
726
727 mydoc.html:
728
729 [% META title = 'My Document Title' %]
730 blah blah blah
731 ...
732
733 header:
734
735 <html>
736 <head>
737 <title>[% template.title %]</title>
738 </head>
739 <body bgcolor="[% bgcolor %]">
740
741 PROCESS
742 The "PROCESS" option may be set to contain the name(s) of template
743 files (relative to "INCLUDE_PATH") which should be processed instead of
744 the main template passed to the Template process() method. This can be
745 used to apply consistent wrappers around all templates, similar to the
746 use of "PRE_PROCESS" and "POST_PROCESS" templates.
747
748 my $template = Template->new({
749 PROCESS => 'content',
750 };
751
752 # processes 'content' instead of 'foo.html'
753 $template->process('foo.html');
754
755 A reference to the original template is available in the "template"
756 variable. Metadata items can be inspected and the template can be
757 processed by specifying it as a variable reference (i.e. prefixed by
758 "$") to an "INCLUDE", "PROCESS" or "WRAPPER" directive.
759
760 content:
761
762 <html>
763 <head>
764 <title>[% template.title %]</title>
765 </head>
766 <body>
767 <!-- begin content -->
768 [% PROCESS $template %]
769 <!-- end content -->
770 <hr>
771 © Copyright [% template.copyright %]
772 </body>
773 </html>
774
775 foo.html:
776
777 [% META
778 title = 'The Foo Page'
779 author = 'Fred Foo'
780 copyright = '2000 Fred Foo'
781 %]
782 <h1>[% template.title %]</h1>
783 Welcome to the Foo Page, blah blah blah
784
785 output:
786
787 <html>
788 <head>
789 <title>The Foo Page</title>
790 </head>
791 <body>
792 <!-- begin content -->
793 <h1>The Foo Page</h1>
794 Welcome to the Foo Page, blah blah blah
795 <!-- end content -->
796 <hr>
797 © Copyright 2000 Fred Foo
798 </body>
799 </html>
800
801 WRAPPER
802 The "WRAPPER" option can be used to specify one or more templates which
803 should be used to wrap around the output of the main page template.
804 The main template is processed first (or any "PROCESS" template(s)) and
805 the output generated is then passed as the "content" variable to the
806 "WRAPPER" template(s) as they are processed.
807
808 my $template = Template->new({
809 WRAPPER => 'wrapper',
810 };
811
812 # process 'foo' then wrap in 'wrapper'
813 $template->process('foo', { message => 'Hello World!' });
814
815 wrapper:
816
817 <wrapper>
818 [% content %]
819 </wrapper>
820
821 foo:
822
823 This is the foo file!
824 Message: [% message %]
825
826 The output generated from this example is:
827
828 <wrapper>
829 This is the foo file!
830 Message: Hello World!
831 </wrapper>
832
833 You can specify more than one "WRAPPER" template by setting the value
834 to be a reference to a list of templates. The "WRAPPER" templates will
835 be processed in reverse order with the output of each being passed to
836 the next (or previous, depending on how you look at it) as the
837 'content' variable. It sounds complicated, but the end result is that
838 it just "Does The Right Thing" to make wrapper templates nest in the
839 order you specify.
840
841 my $template = Template->new({
842 WRAPPER => [ 'outer', 'inner' ],
843 };
844
845 # process 'foo' then wrap in 'inner', then in 'outer'
846 $template->process('foo', { message => 'Hello World!' });
847
848 outer:
849
850 <outer>
851 [% content %]
852 </outer>
853
854 inner:
855
856 <inner>
857 [% content %]
858 </inner>
859
860 The output generated is then:
861
862 <outer>
863 <inner>
864 This is the foo file!
865 Message: Hello World!
866 </inner>
867 </outer>
868
869 One side-effect of the "inside-out" processing of the "WRAPPER"
870 configuration item (and also the "WRAPPER" directive) is that any
871 variables set in the template being wrapped will be visible to the
872 template doing the wrapping, but not the other way around.
873
874 You can use this to good effect in allowing page templates to set pre-
875 defined values which are then used in the wrapper templates. For
876 example, our main page template 'foo' might look like this:
877
878 foo:
879
880 [% page = {
881 title = 'Foo Page'
882 subtitle = 'Everything There is to Know About Foo'
883 author = 'Frank Oliver Octagon'
884 }
885 %]
886
887 <p>
888 Welcome to the page that tells you everything about foo
889 blah blah blah...
890 </p>
891
892 The "foo" template is processed before the wrapper template meaning
893 that the "page" data structure will be defined for use in the wrapper
894 template.
895
896 wrapper:
897
898 <html>
899 <head>
900 <title>[% page.title %]</title>
901 </head>
902 <body>
903 <h1>[% page.title %]</h1>
904 <h2>[% page.subtitle %]</h1>
905 <h3>by [% page.author %]</h3>
906 [% content %]
907 </body>
908 </html>
909
910 It achieves the same effect as defining "META" items which are then
911 accessed via the "template" variable (which you are still free to use
912 within "WRAPPER" templates), but gives you more flexibility in the type
913 and complexity of data that you can define.
914
915 ERROR
916 The "ERROR" (or "ERRORS" if you prefer) configuration item can be used
917 to name a single template or specify a hash array mapping exception
918 types to templates which should be used for error handling. If an
919 uncaught exception is raised from within a template then the
920 appropriate error template will instead be processed.
921
922 If specified as a single value then that template will be processed for
923 all uncaught exceptions.
924
925 my $template = Template->new({
926 ERROR => 'error.html'
927 });
928
929 If the "ERROR" item is a hash reference the keys are assumed to be
930 exception types and the relevant template for a given exception will be
931 selected. A "default" template may be provided for the general case.
932 Note that "ERROR" can be pluralised to "ERRORS" if you find it more
933 appropriate in this case.
934
935 my $template = Template->new({
936 ERRORS => {
937 user => 'user/index.html',
938 dbi => 'error/database',
939 default => 'error/default',
940 },
941 });
942
943 In this example, any "user" exceptions thrown will cause the
944 user/index.html template to be processed, "dbi" errors are handled by
945 error/database and all others by the error/default template. Any
946 "PRE_PROCESS" and/or "POST_PROCESS" templates will also be applied to
947 these error templates.
948
949 Note that exception types are hierarchical and a "foo" handler will
950 catch all "foo.*" errors (e.g. "foo.bar", "foo.bar.baz") if a more
951 specific handler isn't defined. Be sure to quote any exception types
952 that contain periods to prevent Perl concatenating them into a single
953 string (i.e. "user.passwd" is parsed as 'user'.'passwd').
954
955 my $template = Template->new({
956 ERROR => {
957 'user.login' => 'user/login.html',
958 'user.passwd' => 'user/badpasswd.html',
959 'user' => 'user/index.html',
960 'default' => 'error/default',
961 },
962 });
963
964 In this example, any template processed by the $template object, or
965 other templates or code called from within, can raise a "user.login"
966 exception and have the service redirect to the user/login.html
967 template. Similarly, a "user.passwd" exception has a specific handling
968 template, user/badpasswd.html, while all other "user" or "user.*"
969 exceptions cause a redirection to the user/index.html page. All other
970 exception types are handled by error/default.
971
972 Exceptions can be raised in a template using the "THROW" directive,
973
974 [% THROW user.login 'no user id: please login' %]
975
976 or by calling the throw() method on the current Template::Context
977 object,
978
979 $context->throw('user.passwd', 'Incorrect Password');
980 $context->throw('Incorrect Password'); # type 'undef'
981
982 or from Perl code by calling "die()" with a Template::Exception object,
983
984 die (Template::Exception->new('user.denied', 'Invalid User ID'));
985
986 or by simply calling die() with an error string. This is automagically
987 caught and converted to an exception of '"undef"' type which can then
988 be handled in the usual way.
989
990 die "I'm sorry Dave, I can't do that";
991
992 Note that the '"undef"' we're talking about here is a literal string
993 rather than Perl's "undef" used to represent undefined values.
994
996 EVAL_PERL
997 This flag is used to indicate if "PERL" and/or "RAWPERL" blocks should
998 be evaluated. It is disabled by default and any "PERL" or "RAWPERL"
999 blocks encountered will raise exceptions of type '"perl"' with the
1000 message '"EVAL_PERL not set"'. Note however that any "RAWPERL" blocks
1001 should always contain valid Perl code, regardless of the "EVAL_PERL"
1002 flag. The parser will fail to compile templates that contain invalid
1003 Perl code in "RAWPERL" blocks and will throw a '"file"' exception.
1004
1005 When using compiled templates (see "Caching and Compiling Options"),
1006 the "EVAL_PERL" has an affect when the template is compiled, and again
1007 when the templates is subsequently processed, possibly in a different
1008 context to the one that compiled it.
1009
1010 If the "EVAL_PERL" is set when a template is compiled, then all "PERL"
1011 and "RAWPERL" blocks will be included in the compiled template. If the
1012 "EVAL_PERL" option isn't set, then Perl code will be generated which
1013 always throws a '"perl"' exception with the message '"EVAL_PERL not
1014 set"' whenever the compiled template code is run.
1015
1016 Thus, you must have "EVAL_PERL" set if you want your compiled templates
1017 to include "PERL" and "RAWPERL" blocks.
1018
1019 At some point in the future, using a different invocation of the
1020 Template Toolkit, you may come to process such a pre-compiled template.
1021 Assuming the "EVAL_PERL" option was set at the time the template was
1022 compiled, then the output of any "RAWPERL" blocks will be included in
1023 the compiled template and will get executed when the template is
1024 processed. This will happen regardless of the runtime "EVAL_PERL"
1025 status.
1026
1027 Regular "PERL" blocks are a little more cautious, however. If the
1028 "EVAL_PERL" flag isn't set for the current context, that is, the one
1029 which is trying to process it, then it will throw the familiar '"perl"'
1030 exception with the message, '"EVAL_PERL not set"'.
1031
1032 Thus you can compile templates to include "PERL" blocks, but optionally
1033 disable them when you process them later. Note however that it is
1034 possible for a "PERL" block to contain a Perl ""BEGIN { # some code }""
1035 block which will always get run regardless of the runtime "EVAL_PERL"
1036 status. Thus, if you set "EVAL_PERL" when compiling templates, it is
1037 assumed that you trust the templates to Do The Right Thing. Otherwise
1038 you must accept the fact that there's no bulletproof way to prevent any
1039 included code from trampling around in the living room of the runtime
1040 environment, making a real nuisance of itself if it really wants to.
1041 If you don't like the idea of such uninvited guests causing a bother,
1042 then you can accept the default and keep "EVAL_PERL" disabled.
1043
1044 OUTPUT
1045 Default output location or handler. This may be specified as one of: a
1046 file name (relative to "OUTPUT_PATH", if defined, or the current
1047 working directory if not specified absolutely); a file handle (e.g.
1048 "GLOB" or IO::Handle) opened for writing; a reference to a text string
1049 to which the output is appended (the string isn't cleared); a reference
1050 to a subroutine which is called, passing the output text as an
1051 argument; as a reference to an array, onto which the content will be
1052 "push()"ed; or as a reference to any object that supports the "print()"
1053 method. This latter option includes the "Apache::Request" object which
1054 is passed as the argument to Apache/mod_perl handlers.
1055
1056 example 1 (file name):
1057
1058 my $template = Template->new({
1059 OUTPUT => "/tmp/foo",
1060 });
1061
1062 example 2 (text string):
1063
1064 my $output = '';
1065 my $template = Template->new({
1066 OUTPUT => \$output,
1067 });
1068
1069 example 3 (file handle):
1070
1071 open (TOUT, "> $file") || die "$file: $!\n";
1072 my $template = Template->new({
1073 OUTPUT => \*TOUT,
1074 });
1075
1076 example 4 (subroutine):
1077
1078 sub output { my $out = shift; print "OUTPUT: $out" }
1079 my $template = Template->new({
1080 OUTPUT => \&output,
1081 });
1082
1083 example 5 (array reference):
1084
1085 my $template = Template->new({
1086 OUTPUT => \@output,
1087 })
1088
1089 example 6 (Apache/mod_perl handler):
1090
1091 sub handler {
1092 my $r = shift;
1093 my $t = Template->new({
1094 OUTPUT => $r,
1095 });
1096 ...
1097 }
1098
1099 The default "OUTPUT" location be overridden by passing a third
1100 parameter to the Template process() method. This can be specified as
1101 any of the above argument types.
1102
1103 $t->process($file, $vars, "/tmp/foo");
1104 $t->process($file, $vars, \$output);
1105 $t->process($file, $vars, \*MYGLOB);
1106 $t->process($file, $vars, \@output);
1107 $t->process($file, $vars, $r); # Apache::Request
1108 ...
1109
1110 OUTPUT_PATH
1111 The "OUTPUT_PATH" allows a directory to be specified into which output
1112 files should be written. An output file can be specified by the
1113 "OUTPUT" option, or passed by name as the third parameter to the
1114 Template process() method.
1115
1116 my $template = Template->new({
1117 INCLUDE_PATH => "/tmp/src",
1118 OUTPUT_PATH => "/tmp/dest",
1119 });
1120
1121 my $vars = {
1122 ...
1123 };
1124
1125 foreach my $file ('foo.html', 'bar.html') {
1126 $template->process($file, $vars, $file)
1127 || die $template->error();
1128 }
1129
1130 This example will read the input files /tmp/src/foo.html and
1131 /tmp/src/bar.html and write the processed output to /tmp/dest/foo.html
1132 and /tmp/dest/bar.html, respectively.
1133
1134 STRICT
1135 By default the Template Toolkit will silently ignore the use of
1136 undefined variables (a bad design decision that I regret).
1137
1138 When the "STRICT" option is set, the use of any undefined variables or
1139 values will cause an exception to be throw. The exception will have a
1140 "type" of "var.undefined" and a message of the form "undefined
1141 variable: xxx".
1142
1143 my $template = Template->new(
1144 STRICT => 1
1145 );
1146
1147 DEBUG
1148 The "DEBUG" option can be used to enable debugging within the various
1149 different modules that comprise the Template Toolkit. The
1150 Template::Constants module defines a set of "DEBUG_XXXX" constants
1151 which can be combined using the logical OR operator, '"|"'.
1152
1153 use Template::Constants qw( :debug );
1154
1155 my $template = Template->new({
1156 DEBUG => DEBUG_PARSER | DEBUG_PROVIDER,
1157 });
1158
1159 For convenience, you can also provide a string containing a list of
1160 lower case debug options, separated by any non-word characters.
1161
1162 my $template = Template->new({
1163 DEBUG => 'parser, provider',
1164 });
1165
1166 The following "DEBUG_XXXX" flags can be used:
1167
1168 DEBUG_SERVICE
1169 Enables general debugging messages for the Template::Service
1170 module.
1171
1172 DEBUG_CONTEXT
1173 Enables general debugging messages for the Template::Context
1174 module.
1175
1176 DEBUG_PROVIDER
1177 Enables general debugging messages for the Template::Provider
1178 module.
1179
1180 DEBUG_PLUGINS
1181 Enables general debugging messages for the Template::Plugins
1182 module.
1183
1184 DEBUG_FILTERS
1185 Enables general debugging messages for the Template::Filters
1186 module.
1187
1188 DEBUG_PARSER
1189 This flag causes the Template::Parser to generate debugging
1190 messages that show the Perl code generated by parsing and compiling
1191 each template.
1192
1193 DEBUG_UNDEF
1194 This option causes the Template Toolkit to throw an '"undef"' error
1195 whenever it encounters an undefined variable value.
1196
1197 DEBUG_DIRS
1198 This option causes the Template Toolkit to generate comments
1199 indicating the source file, line and original text of each
1200 directive in the template. These comments are embedded in the
1201 template output using the format defined in the "DEBUG_FORMAT"
1202 configuration item, or a simple default format if unspecified.
1203
1204 For example, the following template fragment:
1205
1206 Hello World
1207
1208 would generate this output:
1209
1210 ## input text line 1 : ##
1211 Hello
1212 ## input text line 2 : World ##
1213 World
1214
1215 DEBUG_ALL
1216 Enables all debugging messages.
1217
1218 DEBUG_CALLER
1219 This option causes all debug messages that aren't newline
1220 terminated to have the file name and line number of the caller
1221 appended to them.
1222
1223 DEBUG_FORMAT
1224 The "DEBUG_FORMAT" option can be used to specify a format string for
1225 the debugging messages generated via the "DEBUG_DIRS" option described
1226 above. Any occurances of $file, $line or $text will be replaced with
1227 the current file name, line or directive text, respectively. Notice
1228 how the format is single quoted to prevent Perl from interpolating
1229 those tokens as variables.
1230
1231 my $template = Template->new({
1232 DEBUG => 'dirs',
1233 DEBUG_FORMAT => '<!-- $file line $line : [% $text %] -->',
1234 });
1235
1236 The following template fragment:
1237
1238 [% foo = 'World' %]
1239 Hello [% foo %]
1240
1241 would then generate this output:
1242
1243 <!-- input text line 2 : [% foo = 'World' %] -->
1244 Hello <!-- input text line 3 : [% foo %] -->World
1245
1246 The DEBUG directive can also be used to set a debug format within a
1247 template.
1248
1249 [% DEBUG format '<!-- $file line $line : [% $text %] -->' %]
1250
1252 CACHE_SIZE
1253 The Template::Provider module caches compiled templates to avoid the
1254 need to re-parse template files or blocks each time they are used. The
1255 "CACHE_SIZE" option is used to limit the number of compiled templates
1256 that the module should cache.
1257
1258 By default, the "CACHE_SIZE" is undefined and all compiled templates
1259 are cached. When set to any positive value, the cache will be limited
1260 to storing no more than that number of compiled templates. When a new
1261 template is loaded and compiled and the cache is full (i.e. the number
1262 of entries == "CACHE_SIZE"), the least recently used compiled template
1263 is discarded to make room for the new one.
1264
1265 The "CACHE_SIZE" can be set to 0 to disable caching altogether.
1266
1267 my $template = Template->new({
1268 CACHE_SIZE => 64, # only cache 64 compiled templates
1269 });
1270
1271 my $template = Template->new({
1272 CACHE_SIZE => 0, # don't cache any compiled templates
1273 });
1274
1275 As well as caching templates as they are found, the Template::Provider
1276 also implements negative caching to keep track of templates that are
1277 not found. This allows the provider to quickly decline a request for a
1278 template that it has previously failed to locate, saving the effort of
1279 going to look for it again. This is useful when an "INCLUDE_PATH"
1280 includes multiple providers, ensuring that the request is passed down
1281 through the providers as quickly as possible.
1282
1283 STAT_TTL
1284 This value can be set to control how long the Template::Provider will
1285 keep a template cached in memory before checking to see if the source
1286 template has changed.
1287
1288 my $provider = Template::Provider->new({
1289 STAT_TTL => 60, # one minute
1290 });
1291
1292 The default value is 1 (second). You'll probably want to set this to a
1293 higher value if you're running the Template Toolkit inside a persistent
1294 web server application (e.g. mod_perl). For example, set it to 60 and
1295 the provider will only look for changes to templates once a minute at
1296 most. However, during development (or any time you're making frequent
1297 changes to templates) you'll probably want to keep it set to a low
1298 value so that you don't have to wait for the provider to notice that
1299 your templates have changed.
1300
1301 COMPILE_EXT
1302 From version 2 onwards, the Template Toolkit has the ability to compile
1303 templates to Perl code and save them to disk for subsequent use (i.e.
1304 cache persistence). The "COMPILE_EXT" option may be provided to
1305 specify a filename extension for compiled template files. It is
1306 undefined by default and no attempt will be made to read or write any
1307 compiled template files.
1308
1309 my $template = Template->new({
1310 COMPILE_EXT => '.ttc',
1311 });
1312
1313 If "COMPILE_EXT" is defined (and "COMPILE_DIR" isn't, see below) then
1314 compiled template files with the "COMPILE_EXT" extension will be
1315 written to the same directory from which the source template files were
1316 loaded.
1317
1318 Compiling and subsequent reuse of templates happens automatically
1319 whenever the "COMPILE_EXT" or "COMPILE_DIR" options are set. The
1320 Template Toolkit will automatically reload and reuse compiled files
1321 when it finds them on disk. If the corresponding source file has been
1322 modified since the compiled version as written, then it will load and
1323 re-compile the source and write a new compiled version to disk.
1324
1325 This form of cache persistence offers significant benefits in terms of
1326 time and resources required to reload templates. Compiled templates
1327 can be reloaded by a simple call to Perl's "require()", leaving Perl to
1328 handle all the parsing and compilation. This is a Good Thing.
1329
1330 COMPILE_DIR
1331 The "COMPILE_DIR" option is used to specify an alternate directory root
1332 under which compiled template files should be saved.
1333
1334 my $template = Template->new({
1335 COMPILE_DIR => '/tmp/ttc',
1336 });
1337
1338 The "COMPILE_EXT" option may also be specified to have a consistent
1339 file extension added to these files.
1340
1341 my $template1 = Template->new({
1342 COMPILE_DIR => '/tmp/ttc',
1343 COMPILE_EXT => '.ttc1',
1344 });
1345
1346 my $template2 = Template->new({
1347 COMPILE_DIR => '/tmp/ttc',
1348 COMPILE_EXT => '.ttc2',
1349 });
1350
1351 When "COMPILE_EXT" is undefined, the compiled template files have the
1352 same name as the original template files, but reside in a different
1353 directory tree.
1354
1355 Each directory in the "INCLUDE_PATH" is replicated in full beneath the
1356 "COMPILE_DIR" directory. This example:
1357
1358 my $template = Template->new({
1359 COMPILE_DIR => '/tmp/ttc',
1360 INCLUDE_PATH => '/home/abw/templates:/usr/share/templates',
1361 });
1362
1363 would create the following directory structure:
1364
1365 /tmp/ttc/home/abw/templates/
1366 /tmp/ttc/usr/share/templates/
1367
1368 Files loaded from different "INCLUDE_PATH" directories will have their
1369 compiled forms save in the relevant "COMPILE_DIR" directory.
1370
1371 On Win32 platforms a filename may by prefixed by a drive letter and
1372 colon. e.g.
1373
1374 C:/My Templates/header
1375
1376 The colon will be silently stripped from the filename when it is added
1377 to the "COMPILE_DIR" value(s) to prevent illegal filename being
1378 generated. Any colon in "COMPILE_DIR" elements will be left intact.
1379 For example:
1380
1381 # Win32 only
1382 my $template = Template->new({
1383 DELIMITER => ';',
1384 COMPILE_DIR => 'C:/TT2/Cache',
1385 INCLUDE_PATH => 'C:/TT2/Templates;D:/My Templates',
1386 });
1387
1388 This would create the following cache directories:
1389
1390 C:/TT2/Cache/C/TT2/Templates
1391 C:/TT2/Cache/D/My Templates
1392
1394 PLUGINS
1395 The "PLUGINS" options can be used to provide a reference to a hash
1396 array that maps plugin names to Perl module names. A number of
1397 standard plugins are defined (e.g. "table", "format", "cgi", etc.)
1398 which map to their corresponding "Template::Plugin::*" counterparts.
1399 These can be redefined by values in the "PLUGINS" hash.
1400
1401 my $template = Template->new({
1402 PLUGINS => {
1403 cgi => 'MyOrg::Template::Plugin::CGI',
1404 foo => 'MyOrg::Template::Plugin::Foo',
1405 bar => 'MyOrg::Template::Plugin::Bar',
1406 },
1407 });
1408
1409 The recommended convention is to specify these plugin names in lower
1410 case. The Template Toolkit first looks for an exact case-sensitive
1411 match and then tries the lower case conversion of the name specified.
1412
1413 [% USE Foo %] # look for 'Foo' then 'foo'
1414
1415 If you define all your "PLUGINS" with lower case names then they will
1416 be located regardless of how the user specifies the name in the USE
1417 directive. If, on the other hand, you define your "PLUGINS" with upper
1418 or mixed case names then the name specified in the "USE" directive must
1419 match the case exactly.
1420
1421 The "USE" directive is used to create plugin objects and does so by
1422 calling the plugin() method on the current Template::Context object. If
1423 the plugin name is defined in the "PLUGINS" hash then the corresponding
1424 Perl module is loaded via "require()". The context then calls the
1425 load() class method which should return the class name (default and
1426 general case) or a prototype object against which the new() method can
1427 be called to instantiate individual plugin objects.
1428
1429 If the plugin name is not defined in the "PLUGINS" hash then the
1430 "PLUGIN_BASE" and/or "LOAD_PERL" options come into effect.
1431
1432 PLUGIN_BASE
1433 If a plugin is not defined in the "PLUGINS" hash then the "PLUGIN_BASE"
1434 is used to attempt to construct a correct Perl module name which can be
1435 successfully loaded.
1436
1437 The "PLUGIN_BASE" can be specified as a reference to an array of module
1438 namespaces, or as a single value which is automatically converted to a
1439 list. The default "PLUGIN_BASE" value ("Template::Plugin") is then
1440 added to the end of this list.
1441
1442 example 1:
1443
1444 my $template = Template->new({
1445 PLUGIN_BASE => 'MyOrg::Template::Plugin',
1446 });
1447
1448 [% USE Foo %] # => MyOrg::Template::Plugin::Foo
1449 or Template::Plugin::Foo
1450
1451 example 2:
1452
1453 my $template = Template->new({
1454 PLUGIN_BASE => [ 'MyOrg::Template::Plugin',
1455 'YourOrg::Template::Plugin' ],
1456 });
1457
1458 template:
1459
1460 [% USE Foo %] # => MyOrg::Template::Plugin::Foo
1461 or YourOrg::Template::Plugin::Foo
1462 or Template::Plugin::Foo
1463
1464 If you don't want the default "Template::Plugin" namespace added to the
1465 end of the "PLUGIN_BASE", then set the $Template::Plugins::PLUGIN_BASE
1466 variable to a false value before calling the new() Template#new()
1467 constructor method. This is shown in the example below where the "Foo"
1468 plugin is located as "My::Plugin::Foo" or "Your::Plugin::Foo" but not
1469 as "Template::Plugin::Foo".
1470
1471 example 3:
1472
1473 use Template::Plugins;
1474 $Template::Plugins::PLUGIN_BASE = '';
1475
1476 my $template = Template->new({
1477 PLUGIN_BASE => [ 'My::Plugin',
1478 'Your::Plugin' ],
1479 });
1480
1481 template:
1482
1483 [% USE Foo %] # => My::Plugin::Foo
1484 or Your::Plugin::Foo
1485
1486 LOAD_PERL
1487 If a plugin cannot be loaded using the "PLUGINS" or "PLUGIN_BASE"
1488 approaches then the provider can make a final attempt to load the
1489 module without prepending any prefix to the module path. This allows
1490 regular Perl modules (i.e. those that don't reside in the
1491 Template::Plugin or some other such namespace) to be loaded and used as
1492 plugins.
1493
1494 By default, the "LOAD_PERL" option is set to 0 and no attempt will be
1495 made to load any Perl modules that aren't named explicitly in the
1496 "PLUGINS" hash or reside in a package as named by one of the
1497 "PLUGIN_BASE" components.
1498
1499 Plugins loaded using the "PLUGINS" or "PLUGIN_BASE" receive a reference
1500 to the current context object as the first argument to the new()
1501 constructor. Modules loaded using "LOAD_PERL" are assumed to not
1502 conform to the plugin interface. They must provide a "new()" class
1503 method for instantiating objects but it will not receive a reference to
1504 the context as the first argument.
1505
1506 Plugin modules should provide a load() class method (or inherit the
1507 default one from the Template::Plugin base class) which is called the
1508 first time the plugin is loaded. Regular Perl modules need not. In all
1509 other respects, regular Perl objects and Template Toolkit plugins are
1510 identical.
1511
1512 If a particular Perl module does not conform to the common, but not
1513 unilateral, "new()" constructor convention then a simple plugin wrapper
1514 can be written to interface to it.
1515
1516 FILTERS
1517 The "FILTERS" option can be used to specify custom filters which can
1518 then be used with the "FILTER" directive like any other. These are
1519 added to the standard filters which are available by default. Filters
1520 specified via this option will mask any standard filters of the same
1521 name.
1522
1523 The "FILTERS" option should be specified as a reference to a hash array
1524 in which each key represents the name of a filter. The corresponding
1525 value should contain a reference to an array containing a subroutine
1526 reference and a flag which indicates if the filter is static (0) or
1527 dynamic (1). A filter may also be specified as a solitary subroutine
1528 reference and is assumed to be static.
1529
1530 $template = Template->new({
1531 FILTERS => {
1532 'sfilt1' => \&static_filter, # static
1533 'sfilt2' => [ \&static_filter, 0 ], # same as above
1534 'dfilt1' => [ \&dyanamic_filter_factory, 1 ],
1535 },
1536 });
1537
1538 Additional filters can be specified at any time by calling the
1539 define_filter() method on the current Template::Context object. The
1540 method accepts a filter name, a reference to a filter subroutine and an
1541 optional flag to indicate if the filter is dynamic.
1542
1543 my $context = $template->context();
1544 $context->define_filter('new_html', \&new_html);
1545 $context->define_filter('new_repeat', \&new_repeat, 1);
1546
1547 Static filters are those where a single subroutine reference is used
1548 for all invocations of a particular filter. Filters that don't accept
1549 any configuration parameters (e.g. "html") can be implemented
1550 statically. The subroutine reference is simply returned when that
1551 particular filter is requested. The subroutine is called to filter the
1552 output of a template block which is passed as the only argument. The
1553 subroutine should return the modified text.
1554
1555 sub static_filter {
1556 my $text = shift;
1557 # do something to modify $text...
1558 return $text;
1559 }
1560
1561 The following template fragment:
1562
1563 [% FILTER sfilt1 %]
1564 Blah blah blah.
1565 [% END %]
1566
1567 is approximately equivalent to:
1568
1569 &static_filter("\nBlah blah blah.\n");
1570
1571 Filters that can accept parameters (e.g. "truncate") should be
1572 implemented dynamically. In this case, the subroutine is taken to be a
1573 filter 'factory' that is called to create a unique filter subroutine
1574 each time one is requested. A reference to the current
1575 Template::Context object is passed as the first parameter, followed by
1576 any additional parameters specified. The subroutine should return
1577 another subroutine reference (usually a closure) which implements the
1578 filter.
1579
1580 sub dynamic_filter_factory {
1581 my ($context, @args) = @_;
1582
1583 return sub {
1584 my $text = shift;
1585 # do something to modify $text...
1586 return $text;
1587 }
1588 }
1589
1590 The following template fragment:
1591
1592 [% FILTER dfilt1(123, 456) %]
1593 Blah blah blah
1594 [% END %]
1595
1596 is approximately equivalent to:
1597
1598 my $filter = &dynamic_filter_factory($context, 123, 456);
1599 &$filter("\nBlah blah blah.\n");
1600
1601 See the "FILTER" directive for further examples.
1602
1604 LOAD_TEMPLATES
1605 The "LOAD_TEMPLATES" option can be used to provide a reference to a
1606 list of Template::Provider objects or sub-classes thereof which will
1607 take responsibility for loading and compiling templates.
1608
1609 my $template = Template->new({
1610 LOAD_TEMPLATES => [
1611 MyOrg::Template::Provider->new({ ... }),
1612 Template::Provider->new({ ... }),
1613 ],
1614 });
1615
1616 When a "PROCESS", "INCLUDE" or "WRAPPER" directive is encountered, the
1617 named template may refer to a locally defined "BLOCK" or a file
1618 relative to the "INCLUDE_PATH" (or an absolute or relative path if the
1619 appropriate "ABSOLUTE" or "RELATIVE" options are set). If a "BLOCK"
1620 definition can't be found (see the Template::Context template() method
1621 for a discussion of "BLOCK" locality) then each of the "LOAD_TEMPLATES"
1622 provider objects is queried in turn via the fetch() method to see if it
1623 can supply the required template.
1624
1625 Each provider can return a compiled template, an error, or decline to
1626 service the request in which case the responsibility is passed to the
1627 next provider. If none of the providers can service the request then a
1628 'not found' error is returned. The same basic provider mechanism is
1629 also used for the "INSERT" directive but it bypasses any "BLOCK"
1630 definitions and doesn't attempt is to parse or process the contents of
1631 the template file.
1632
1633 If "LOAD_TEMPLATES" is undefined, a single default provider will be
1634 instantiated using the current configuration parameters. For example,
1635 the Template::Provider "INCLUDE_PATH" option can be specified in the
1636 Template configuration and will be correctly passed to the provider's
1637 constructor method.
1638
1639 my $template = Template->new({
1640 INCLUDE_PATH => '/here:/there',
1641 });
1642
1643 LOAD_PLUGINS
1644 The "LOAD_PLUGINS" options can be used to specify a list of provider
1645 objects (i.e. they implement the fetch() method) which are responsible
1646 for loading and instantiating template plugin objects. The
1647 Template::Context plugin() method queries each provider in turn in a
1648 "Chain of Responsibility" as per the template() and filter() methods.
1649
1650 my $template = Template->new({
1651 LOAD_PLUGINS => [
1652 MyOrg::Template::Plugins->new({ ... }),
1653 Template::Plugins->new({ ... }),
1654 ],
1655 });
1656
1657 By default, a single Template::Plugins object is created using the
1658 current configuration hash. Configuration items destined for the
1659 Template::Plugins constructor may be added to the Template constructor.
1660
1661 my $template = Template->new({
1662 PLUGIN_BASE => 'MyOrg::Template::Plugins',
1663 LOAD_PERL => 1,
1664 });
1665
1666 LOAD_FILTERS
1667 The "LOAD_FILTERS" option can be used to specify a list of provider
1668 objects (i.e. they implement the fetch() method) which are responsible
1669 for returning and/or creating filter subroutines. The Template::Context
1670 filter() method queries each provider in turn in a "Chain of
1671 Responsibility" as per the template() and plugin() methods.
1672
1673 my $template = Template->new({
1674 LOAD_FILTERS => [
1675 MyTemplate::Filters->new(),
1676 Template::Filters->new(),
1677 ],
1678 });
1679
1680 By default, a single Template::Filters object is created for the
1681 "LOAD_FILTERS" list.
1682
1683 TOLERANT
1684 The "TOLERANT" flag is used by the various Template Toolkit provider
1685 modules (Template::Provider, Template::Plugins, Template::Filters) to
1686 control their behaviour when errors are encountered. By default, any
1687 errors are reported as such, with the request for the particular
1688 resource ("template", "plugin", "filter") being denied and an exception
1689 raised.
1690
1691 When the "TOLERANT" flag is set to any true values, errors will be
1692 silently ignored and the provider will instead return
1693 "STATUS_DECLINED". This allows a subsequent provider to take
1694 responsibility for providing the resource, rather than failing the
1695 request outright. If all providers decline to service the request,
1696 either through tolerated failure or a genuine disinclination to comply,
1697 then a '"<resource> not found"' exception is raised.
1698
1699 SERVICE
1700 A reference to a Template::Service object, or sub-class thereof, to
1701 which the Template module should delegate. If unspecified, a
1702 Template::Service object is automatically created using the current
1703 configuration hash.
1704
1705 my $template = Template->new({
1706 SERVICE => MyOrg::Template::Service->new({ ... }),
1707 });
1708
1709 CONTEXT
1710 A reference to a Template::Context object which is used to define a
1711 specific environment in which template are processed. A
1712 Template::Context object is passed as the only parameter to the Perl
1713 subroutines that represent "compiled" template documents. Template
1714 subroutines make callbacks into the context object to access Template
1715 Toolkit functionality, for example, to to "INCLUDE" or "PROCESS"
1716 another template (include() and process() methods, respectively), to
1717 "USE" a plugin (plugin()) or instantiate a filter (filter()) or to
1718 access the stash (stash()) which manages variable definitions via the
1719 get() and set() methods.
1720
1721 my $template = Template->new({
1722 CONTEXT => MyOrg::Template::Context->new({ ... }),
1723 });
1724
1725 STASH
1726 A reference to a Template::Stash object or sub-class which will take
1727 responsibility for managing template variables.
1728
1729 my $stash = MyOrg::Template::Stash->new({ ... });
1730 my $template = Template->new({
1731 STASH => $stash,
1732 });
1733
1734 If unspecified, a default stash object is created using the "VARIABLES"
1735 configuration item to initialise the stash variables.
1736
1737 my $template = Template->new({
1738 VARIABLES => {
1739 id => 'abw',
1740 name => 'Andy Wardley',
1741 },
1742 };
1743
1744 PARSER
1745 The Template::Parser module implements a parser object for compiling
1746 templates into Perl code which can then be executed. A default object
1747 of this class is created automatically and then used by the
1748 Template::Provider whenever a template is loaded and requires
1749 compilation. The "PARSER" option can be used to provide a reference to
1750 an alternate parser object.
1751
1752 my $template = Template->new({
1753 PARSER => MyOrg::Template::Parser->new({ ... }),
1754 });
1755
1756 GRAMMAR
1757 The "GRAMMAR" configuration item can be used to specify an alternate
1758 grammar for the parser. This allows a modified or entirely new
1759 template language to be constructed and used by the Template Toolkit.
1760
1761 Source templates are compiled to Perl code by the Template::Parser
1762 using the Template::Grammar (by default) to define the language
1763 structure and semantics. Compiled templates are thus inherently
1764 "compatible" with each other and there is nothing to prevent any number
1765 of different template languages being compiled and used within the same
1766 Template Toolkit processing environment (other than the usual time and
1767 memory constraints).
1768
1769 The Template::Grammar file is constructed from a YACC like grammar
1770 (using "Parse::YAPP") and a skeleton module template. These files are
1771 provided, along with a small script to rebuild the grammar, in the
1772 parser sub-directory of the distribution.
1773
1774 You don't have to know or worry about these unless you want to hack on
1775 the template language or define your own variant. There is a README
1776 file in the same directory which provides some small guidance but it is
1777 assumed that you know what you're doing if you venture herein. If you
1778 grok LALR parsers, then you should find it comfortably familiar.
1779
1780 By default, an instance of the default Template::Grammar will be
1781 created and used automatically if a "GRAMMAR" item isn't specified.
1782
1783 use MyOrg::Template::Grammar;
1784
1785 my $template = Template->new({
1786 GRAMMAR = MyOrg::Template::Grammar->new();
1787 });
1788
1789
1790
1791perl v5.10.1 2009-04-07 Template::Manual::Config(3)