[Catalyst] TT VMethods

Mitchell Jackson mitch.lists at onsitesquad.com
Sat Sep 15 02:31:29 GMT 2007


That's awesome!  Thanks for the hints!

/mitch

Felix Antonius Wilhelm Ostmann wrote:
> i use another easy way:
>
> package C::V::TT;
>
> use strict;
> use base 'Catalyst::View::TT';
>
> __PACKAGE__->config(
>    {
>        CATALYST_VAR => 'catalyst',
>        ...
>        FILTERS => {
>            'dollar' => sub { sprintf('%.2f',$_[0]); },
>        }
>    },
> );
>
>
>
> so you can use it in the Template like this:
>
> [% var | dollar %]
>
> and you can chain that!
>
> [% var | dollar | html | uri %]
>
>
> (i hope that works, dont check that, just copy & paste from one app, 
> perhaps typo or something small errors)
>
>
> Mitchell Jackson schrieb:
>> Today I saw how easy it is to extend Template-Toolkit within 
>> Catalyst.  Perhaps somebody here will find this useful.
>>
>> I wanted to easily format dollar amounts from within the tt2 
>> template.  I had been doing this with [% FILTER format( "%.2f" ) %], 
>> but having FILTER/END everywhere seemed a bit annoying, and I wanted 
>> to add commas to make the data easier to read on large numbers.
>>
>> In Catalyst, you can add extensions to Template from your app's lib 
>> directory.  You can add filters ( Template::Plugin::Filter ) and 
>> VMethods ( Template::Plugin::VMethods ) simply by putting them into 
>> MyApp/lib/Template/Plugin
>>
>> Following is an example that adds a 'commify' method to any scalar 
>> template variable.  [% var.commify %] to add seperating commas, [% 
>> var.commify(2) %] to add commas and round to two decimal places
>>
>> /Mitch
>> OnSite Mobile
>>
>>
>>
>> #MyApp/lib/Template/Plugin/commify.pm
>> package Template::Plugin::commify;
>>
>> use Template::Plugin::VMethods;
>> use base qw(Template::Plugin::VMethods);
>> @SCALAR_OPS = qw(commify);
>>
>> =head1 commify
>>
>>    VMethod extension to format a number with pretty commas each 3rd 
>> digit,
>>    and to specify decimal precision
>>
>>    Template Syntax:
>>    [% USE commify %]
>>    [% test = '1234567890.983457' %]
>>    [% test.commify    %] 1,234,567,890.983457
>>    [% test.commify(2) %] 1,234,567,890.98
>>
>> =cut
>>
>> sub commify {
>>    my ( $data, $precision ) = @_;
>>    my $decimals;
>>
>>    # don't do anything to the data if it doesn't look like a number
>>    return $data
>>        if $data !~ /^\d+(?:\.\d+)$/;
>>
>>    # round to the specified precision
>>    $data = sprintf "%.${precision}f", $data
>>        if defined $precision;
>>
>>    # detach the decimals, we don't want commas there
>>    $decimals = $1 if $data =~ s/(\.\d+)//;
>>
>>    # insert commas
>>    $data =~ s/(\d{1,3})(?=(?:\d\d\d)+(?!\d))/$1,/g;
>>
>>    # reattach decimals
>>    $data .= $decimals if defined $decimals;
>>
>>    $data;
>> }
>>
>> 1;
>>
>>
>>
>> _______________________________________________
>> List: Catalyst at lists.rawmode.org
>> Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst
>> Searchable archive: 
>> http://www.mail-archive.com/catalyst@lists.rawmode.org/
>> Dev site: http://dev.catalyst.perl.org/
>>
>>
>
>



More information about the Catalyst mailing list