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-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |