2009-06-06 7 views
2

TTテンプレートで定数を使いたいです。 HTML::Masonでは(選択の私の以前のテンプレートエンジン)私が行うことができます:CatalystアプリケーションでTemplate Tookitテンプレートの定数を定義するにはどうすればよいですか?

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

私はTemplate Toolkitでこれを行うことができますどのように?タイトルに記載されているように、これはCatalystアプリなので、私は隠し場所に定数を置くことができると思っていましたが、それは少し厄介なようです。

--edit

申し訳ありません - 私は私は私自身の定数を使用したい言及している必要があります - のMyApp ::定数からエクスポートし、重複することなく。

+0

OK、回答を選択するのが難しいと感じましたが、最終的な解決策に最も近いfiedoを選択しました。私は定数を$ c-> stashに挿入して、Templateコンストラクタで渡すのと同じように、テンプレートで使用できるようにします。 TTの大きな点はsigilsを使用しないことです。サブルーチンやスカラーの場合は同じ方法で参照されます。 – cubabit

答えて

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内のすべてのシンボル、チェックを見て(これはconstant.pmが下に何をするかですフード)を開き、mapを使用してTTにハッシュリファレンスを提供します。

+1

をご覧ください。また、 'VARIABLES'の代わりに' CONSTANTS'オプションを使うこともできますオプション。 –

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

+0

OK - 最初の2つの提案の問題は、私が定数を1つの場所に保持したいということです。パッケージ。 "コンパイル時定数折りたたみ"の提案は、私の定数パッケージを使用することができるので、最良の解決策と思われます。しかし、誰かがCatalystコントローラでこれを行う方法を説明することはできますか? – cubabit

+0

TTの定数の詳細については、http://template-toolkit.org/docs/modules/Template/Namespace/Constants.html – draegtun

関連する問題