簡體   English   中英

模板工具包中的Perl邏輯

[英]Perl Logic in Template Toolkit

我有一個貨幣值,我想使用Locale::Currency::Format但我不知道如何格式化它。

這是我在Template Toolkit中的輸出

[% amount %]

我希望使用以下方法輸出:

currency_format('USD', amount, FMT_SYMBOL)

模板工具包的新功能,所以任何幫助都表示贊賞。

我喜歡Dave Cross的答案,我同意他和codnodder關於EVAL_PERL ,我幾乎每天都會在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 %].

如果您有權訪問“控制器”,則可以添加過濾器

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 = > \&currency_format,
  ...
}) or die;

然后在模板中,您可以使用currency_format作為函數:

[% currency_format('USD', amount, FMT_SYMBOL) %]

3 /為Local :: Currency :: Format寫一個真正的TT插件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM