Template::View - customised view of a template processing context
# define a view
[% VIEW view
# some standard args
prefix => 'my_',
suffix => '.tt2',
notfound => 'no_such_file'
...
# any other data
title => 'My View title'
other_item => 'Joe Random Data'
...
%]
# add new data definitions, via 'my' self reference
[% my.author = "$abw.name <$abw.email>" %]
[% my.copy = "© Copyright 2000 $my.author" %]
# define a local block
[% BLOCK header %]
This is the header block, title: [% title or my.title %]
[% END %]
[% END %]
# access data items for view
[% view.title %]
[% view.other_item %]
# access blocks directly ('include_naked' option, set by default)
[% view.header %]
[% view.header(title => 'New Title') %]
# non-local templates have prefix/suffix attached
[% view.footer %] # => [% INCLUDE my_footer.tt2 %]
# more verbose form of block access
[% view.include( 'header', title => 'The Header Title' ) %]
[% view.include_header( title => 'The Header Title' ) %]
# very short form of above ('include_naked' option, set by default)
[% view.header( title => 'The Header Title' ) %]
# non-local templates have prefix/suffix attached
[% view.footer %] # => [% INCLUDE my_footer.tt2 %]
# fallback on the 'notfound' template ('my_no_such_file.tt2')
# if template not found
[% view.include('missing') %]
[% view.include_missing %]
[% view.missing %]
# print() includes a template relevant to argument type
[% view.print("some text") %] # type=TEXT, template='text'
[% BLOCK my_text.tt2 %] # 'text' with prefix/suffix
Text: [% item %]
[% END %]
# now print() a hash ref, mapped to 'hash' template
[% view.print(some_hash_ref) %] # type=HASH, template='hash'
[% BLOCK my_hash.tt2 %] # 'hash' with prefix/suffix
hash keys: [% item.keys.sort.join(', ')
[% END %]
# now print() a list ref, mapped to 'list' template
[% view.print(my_list_ref) %] # type=ARRAY, template='list'
[% BLOCK my_list.tt2 %] # 'list' with prefix/suffix
list: [% item.join(', ') %]
[% END %]
# print() maps 'My::Object' to 'My_Object'
[% view.print(myobj) %]
[% BLOCK my_My_Object.tt2 %]
[% item.this %], [% item.that %]
[% END %]
# update mapping table
[% view.map.ARRAY = 'my_list_template' %]
[% view.map.TEXT = 'my_text_block' %]
# change prefix, suffix, item name, etc.
[% view.prefix = 'your_' %]
[% view.default = 'anyobj' %]
...
A reference to a hash array of configuration options may be passed as the second argument.
[% USE view(prefix => 'my_') %]
[% view.view('foo', a => 20) %] # => my_foo
[% USE view(suffix => '.tt2') %]
[% view.view('foo', a => 20) %] # => foo.tt2
[% USE view(map => { ARRAY => 'my_list',
HASH => 'your_hash',
My::Foo => 'my_foo', } ) %]
[% view.print(some_text) %] # => text
[% view.print(a_list) %] # => my_list
[% view.print(a_hash) %] # => your_hash
[% view.print(a_foo) %] # => my_foo
[% BLOCK text %]
Text: [% item %]
[% END %]
[% BLOCK my_list %]
list: [% item.join(', ') %]
[% END %]
[% BLOCK your_hash %]
hash keys: [% item.keys.sort.join(', ')
[% END %]
[% BLOCK my_foo %]
Foo: [% item.this %], [% item.that %]
[% END %]
package Foo;
sub present {
my ($self, $view) = @_;
return "a regular view of a Foo\n";
}
sub debug {
my ($self, $view) = @_;
return "a debug view of a Foo\n";
}
In a template:
[% USE view %]
[% view.print(my_foo_object) %] # a regular view of a Foo
[% USE view(method => 'debug') %]
[% view.print(my_foo_object) %] # a debug view of a Foo
[% USE view(default => 'my_object') %]
[% view.print(objref) %] # => my_object
If no map entry or default is provided then the view will attempt to construct a template name from the object class, substituting any sequence of non-word characters to single underscores, e.g.
# 'fubar' is an object of class Foo::Bar
[% view.print(fubar) %] # => Foo_Bar
Any current prefix and suffix will be added to both the default template name and any name constructed from the object class.
[% USE view %]
[% BLOCK list %]
[% item.join(', ') %]
[% END %]
[% view.print(a_list) %]
[% USE view(item => 'thing') %]
[% BLOCK list %]
[% thing.join(', ') %]
[% END %]
[% view.print(a_list) %]
[% USE view %]
[% view.view_header() %] # => view('header')
[% USE view(view_prefix => 'show_me_the_' %]
[% view.show_me_the_header() %] # => view('header')
[% USE view(view_naked => 1) %]
[% view.header() %] # => view('header')
This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
|
Закладки на сайте Проследить за страницей |
Created 1996-2025 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |