我有一個貨幣值,我想用Locale::Currency::Format
來格式化,但是我不知道如何格式化它。模板工具包中的Perl邏輯
這裏是我的模板工具包輸出
[% amount %]
我想這使用下面的方法來輸出:
currency_format('USD', amount, FMT_SYMBOL)
新建模板工具包,所以任何幫助表示讚賞。
我有一個貨幣值,我想用Locale::Currency::Format
來格式化,但是我不知道如何格式化它。模板工具包中的Perl邏輯
這裏是我的模板工具包輸出
[% amount %]
我想這使用下面的方法來輸出:
currency_format('USD', amount, FMT_SYMBOL)
新建模板工具包,所以任何幫助表示讚賞。
我喜歡戴夫克羅斯的答案,我同意他和codnodder約EVAL_PERL
,我還沒有找到作爲幾乎每天TT使用7年或8年的解決方案所必需的。
就個人而言,我會用:
[%- USE fmt = Class('Locale::Currency::Format'); -%]
<td>[% fmt.currency_format(var1, var2, var3) %]</td>
但是,如果我用這一切的時候,我會忍不住寫它周圍的TT插件包裝。
如果您在「控制器」中啓用了EVAL_PERL,則可以使用嵌入式Perl的 來包含該模塊並添加一個vmethod。
例如,
use strict;
use Template;
my $tt = Template->new(EVAL_PERL=>1);
my $out;
$tt->process(\*DATA, { amount => 50.34 }, \$out) or die $tt->error, "\n";
print $out;
__DATA__
[% PERL -%]
sub dollars { sprintf('$%0.02f', $_[0]); }
# or:
# use Local::Currency::Format;
# sub dollars { currency_format('USD', $_[0], FMT_SYMBOL); }
$stash->define_vmethod('scalar', 'dollars', \&dollars);
[% END -%]
The amount is [% amount.dollars %].
如果你有一些進入 「控制器」,您可以添加FILTER。
use strict;
use Template;
#use Local::Currency::Format;
my $tt = Template->new({
#FILTERS => { 'dollars' => sub { currency_format('USD', $_[0], FMT_SYMBOL); } },
FILTERS => { 'dollars' => sub { sprintf('$%0.02f', $_[0]); } },
});
my $out;
$tt->process(\*DATA, { amount => 50.34 }, \$out) or die $tt->error, "\n";
print $out;
__DATA__
The amount is [% amount | dollars %].
編輯:請注意,我使用sprintf
來格式化貨幣只是一個佔位符。你可以用你選擇的模塊或方法替換它。
我無法在CPAN上找到Local :: Currency :: Format,因此我無法向您顯示它是如何與此模塊配合使用的。我可以,不過,告訴你需要去的大方向
您有幾種選擇:
1 /使用currency_format
之前它被傳遞到模板的數據格式。
my $amount = currency_format('USD', $amount, FMT_SYMBOL);
$tt->process($template_name, { amount => $amount, ... }) or die;
然後在模板你可以只使用[% amount %]
。
2 /通過currency_format
作爲模板的動態變量。
$tt->process($template_name, {
amount => $amount,
currency_format = > \¤cy_format,
...
}) or die;
然後在模板中,你可以使用currency_format
作爲一個函數:
[% currency_format('USD', amount, FMT_SYMBOL) %]
3 /寫一個真正的TT插件當地::貨幣::格式。
我明白這可以在控制器中完成,但我想知道這是否可以在模板中處理。 – KingKongFrog
您是否在控制器中啓用了[EVAL_PERL](http://search.cpan.org/~abw/Template-Toolkit-2.25/lib/Template/Manual/Directives.pod#PERL)?如果是這樣,你可以在你的模板中包含原始的perl。 – codnodder