template::view(3)

NAME

Template::View - customised view of a template processing
context

SYNOPSIS

# 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    = "&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' %]
...

DESCRIPTION

TODO

METHODS

new($context,%config)

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.

prefix
Prefix added to all template names.

[% USE view(prefix => 'my_') %]
[% view.view('foo', a => 20) %] # => my_foo
suffix
Suffix added to all template names.

[% USE view(suffix => '.tt2') %]
[% view.view('foo', a => 20) %] # => foo.tt2
map Hash array mapping reference types to template names.
The print() method uses this to determine which tem
plate 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 %]
method
Name of a method which objects passed to print() may provide for presenting themselves to the view. If a
specific map entry can't be found for an object refer
ence 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 Foo0;
}
sub debug {
my ($self, $view) = @_;
return "a debug view of a Foo0;
}
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
default
Default template to use if no specific map entry is
found for an item.

[% 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.
notfound
Fallback template to use if any other isn't found.
item
Name of the template variable to which the 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_prefix
Prefix of methods which should be mapped to 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')
view_naked
Flag to indcate if any attempt should be made to map
method names to template names where they don't match
the view_prefix. Defaults to 0.

[% USE view(view_naked => 1) %]
[% view.header() %] # =>
view('header')
print( $obj1, $obj2, ... config)
TODO
view( $template,%vars,%config );
TODO

AUTHOR

Andy Wardley <abw@kfs.org>

REVISION

$Revision: 2.8 $

COPYRIGHT

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.

SEE ALSO

Template::Plugin,
Copyright © 2010-2025 Platon Technologies, s.r.o.           Home | Man pages | tLDP | Documents | Utilities | About
Design by styleshout