3

TTテンプレートで定数を使用したい。HTML :: Mason (以前に選択したテンプレートエンジン)では、次のことができます。

<%once>
use MyApp::Constants qw(CONSTANT);
</%once>

テンプレートツールキットでこれを行うにはどうすればよいですか?タイトルで述べたように、これはCatalystアプリなので、定数を隠し場所に入れることができると思っていましたが、それは少し厄介なようです。

- 編集

申し訳ありませんが、自分の定数を使用したいと言っておく必要があります。MyApp:: Constantsからエクスポートされ、重複することはありません。

4

2 に答える 2

4

TT構成では、 VARIABLESオプションを使用して、処理時にすべてのテンプレートに渡される値のリストを渡すことができます。いくつかのシンボルテーブルのトリックを使用して、すべての定数を構成に吸い込むことができます。

use MyApp::Constants;
use Template;


my $tt;     # template object
{ 
    no strict 'refs';
    $tt = Template->new( { 
        VARIABLES => { map { $_ => &{ 'MyApp::Constants::' . $_ } } 
                       grep { defined &{ 'MyApp::Constants::' . $_ } }
                       keys %MyApp::Constants::
                     }
        }
    )
}

これは、パッケージ内のすべてのシンボルをMyApp::Constants調べ、それらがサブルーチンとして定義されているかどうかをチェックし(これは内部で行われることです) 、TTにそれらのハッシュ参照を提供するためにconstant.pm使用します。map

于 2009-06-07T10:23:40.853 に答える
2

いくつかの可能性。いくつかの変数を定義するだけです。

[% users = {
     tom   => 'Thomas',
     dick  => 'Richard',
     larry => 'Lawrence',
   }
%]

[% FOREACH u IN users %]
   * [% u.key %] : [% u.value %]
[% END %]

グローバル変数を使用します。

[% global.version=1.234 %]

This is Version [% global.version %].

METAディレクティブを使用すると、単純なメタデータ項目をテンプレート内で定義できます。これらは、テンプレートが解析されるときに評価されるため、単純な値のみが含まれる場合があります(たとえば、他の変数値をMETA変数に補間することはできません)。

[% META
   title   = 'The Cat in the Hat'
   author  = 'Dr. Seuss'
   version = 1.23 
%]

質問の本文ですでに述べたように、これもあります:http: //template-toolkit.org/docs/manual/Variables.html#section_Compile_Time_Constant_Folding

于 2009-06-06T19:10:35.687 に答える