[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