[Catalyst] TT VMethods

Moritz Onken onken at houseofdesign.de
Thu Jan 17 12:14:22 GMT 2008


please implement localization (different separators)


Am 17.01.2008 um 10:25 schrieb Octavian Rasnita:

> Also the CPAN module
>
> Template::Plugin::Comma
>
> can be used for doing this.
>
> Octavian
>
> ----- Original Message ----- From: "Mitchell Jackson" <mitch.lists at onsitesquad.com 
> >
> To: <catalyst at lists.rawmode.org>
> Sent: Thursday, September 13, 2007 4:35 AM
> Subject: [Catalyst] TT VMethods
>
>
>> 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/
>
>
> _______________________________________________
> List: Catalyst at lists.scsys.co.uk
> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
> Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
> Dev site: http://dev.catalyst.perl.org/




More information about the Catalyst mailing list