Template::View - customised view of a template processing context |
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' %] ...
TODO
Creates a new Template::View presenting a custom view of the specified $context object.
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
print()
method uses this to determine which template to use to present any
particular item. The TEXT, HASH and ARRAY items default to 'test',
'hash' and 'list' appropriately.
[% 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 %]
print()
may provide for presenting
themselves to the view. If a specific map entry can't be found for an
object reference and it supports the method (default: 'present') then
the method will be called, passing the view as an argument. The object
can then make callbacks against the view to present itself.
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.
print()
method assigns the current
item. Defaults to 'item'.
[% USE view %] [% BLOCK list %] [% item.join(', ') %] [% END %] [% view.print(a_list) %]
[% USE view(item => 'thing') %] [% BLOCK list %] [% thing.join(', ') %] [% END %] [% view.print(a_list) %]
view()
by AUTOLOAD. Defaults
to 'view_'.
[% 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')
TODO
TODO
Andy Wardley <abw@kfs.org>
$Revision: 2.8 $
Copyright (C) 2000 Andy Wardley. All Rights Reserved.
This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
Template::View - customised view of a template processing context |