内容へ移動
Cat Paw Software
ユーザ用ツール
ログイン
サイト用ツール
検索
ツール
文書の表示
以前のリビジョン
バックリンク
最近の変更
メディアマネージャー
サイトマップ
ログイン
>
最近の変更
メディアマネージャー
サイトマップ
トレース:
catalyst:tt
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
====== Template Toolkitによるビュー作成 ====== 以下のモジュールを追加 * Catalyst::View::TT * Catalyst::Plugin::Charsets::Japanese * Catalyst::Helper::View::TT ( or Catalyst::Helper::View::TTSite ) Template Toolkit 本体が入ってなければ、それも入れる。たぶん一緒に入るはず(覚えてないw) ヘルパースクリプトでTemplate Toolkit用でビューを処理するクラス作成 $ ./script/hoge_creator view TT TT 最初のTTはクラス名、後ろのTTはテンプレートツールキットを使うよ、の意味 $ ./script/hoge_creator view TT TTSite とすると、WRAPPERなどの設定が入ったTTクラスを作ってくれる。詳しくはググってちょうだい。 テンプレートファイル置き場をアプリケーションディレクトリに作成 $ mkdir ${APP_ROOT}/root/tmpl ''${APP_ROOT}/Hoge.yml'' にテンプレートツールキット用の設定を追加 <code> Charsets::Japanese: charsets: 'UTF-8' View::TT: INCLUDE_PATH: - 'root/tmpl' TEMPLATE_EXTENSION: '.tt' </code> テンプレート''${APP_ROOT}/root/tmpl/test/hello.tt''を作成 <code html> <body> [% hogehoge %] </body> </code> コントローラ ''${APP_ROOT}/lib/Hoge/Controller/Test.pm'' を修正 <code perl> sub hello : Local { my ($self, $c) = @_; $c->stash->{hogehoge} = "ホゲホゲ" } sub end : Private { my ($self, $c) = @_; # レスポンスボディが無い時にテンプレートツールキット(さっき作ったTTクラス)に処理を委譲する $c->forward($c->view('TT')) unless $c->response->body; } </code> サーバを起動してhttp://localhost:3000/test/helloへアクセス。ホゲホゲと表示されたらおめでとう。コントローラとビューまで出来ました。 ===== リダイレクトする場合の処理 ===== コントローラで <code perl> sub hello : Local { my ($self, $c) = @_; $c->res->redirect($c->uri_for("/hoge/index")); } </code> とやるとリダイレクトできるが、Catalystがテンプレートを呼ぼうとしておかしくなるのでendに小細工する。 <code perl> sub end : Private { my ($self, $c) = @_; $c->forward($c->view('TT')) unless ($c->response->body || $c->response->redirect); } </code> 参考:[[http://blog.hide-k.net/archives/2006/01/catalystrespons.php#comments|hide-k.net#blog: Catalyst::Response->redirect()のメモ]] このendを Root.pm に書いて、全コントローラで共有するのが良いかも。 ===== まとめて404ページへ ===== いろいろディスパッチメソッドで404を返すケースがあり、404エラーで共通のテンプレートを使いたい場合フォワード処理をRoot.pmのend辺りにまとめてしまう <code perl> sub hello : Local { my ($self, $c) = @_; ... if ( ... ) { $c->res->status(404); return; } ... } sub end : Private { my ($self, $c) = @_; if ($c->stash->status eq '404') { $c->stash->{template} = "何か404のテンプレート"; $c->forward($c->view("View::TT")); return; } } </code> ===== ヴァーチャルメソッドの追加 ===== Template Toolkit上で使える[[http://search.cpan.org/perldoc?Template::Manual::VMethods|Virtual Method]]は簡単に追加出来る。 以下のようなモジュールを作成し、catalystを起動するpmファイルか、Root.pm辺りでuse。 <code perl> package Hoge::Util::TT::VMethod; use strict; use warnings; use Template::Stash; # 数字を3桁でカンマ区切りする $Template::Stash::SCALAR_OPS->{ comma } = sub { my $price = shift; while ( ($price =~ s/([0-9]+)([0-9]{3})/$1,$2/) ){ ; } return $price; }; </code> とりあえず動かすだけならこれで充分だが、Catalystプラグインとして組み込む方法があると思われ。 ===== UTF8で文字化け ===== FillInFormなどが入ると文字化けすることがある。Hoge::View::TTの親クラスを[[http://search.cpan.org/perldoc?Catalyst::View::TT::ForceUTF8|Catalyst::View::TT::ForceUTF8]]にすると治るかも。 文字化けの原因がよくわからんので要調査。 ===== ラッパー ===== Template Toolkitにはラッパーというテンプレート部品化機能がある。INCLUDEとの違いは * INCLUDE = 自分に、他のテンプレートを埋め込む * WRAPPER = 自分を、他のテンプレートに埋め込む という違いがある。 こんな感じでWrapperテンプレを作る <code html> <!-- root/tmpl/wrapper/hoge.tt --> <html> <head> <title>[% title %]</title> </head> <body> [% content %] </body> </html> </code> Catalystが呼び出すテンプレートは、こう書く <code html> <!-- fuga/piyo.tt 例えば Fuga.pm の piyo:Local から呼ばれるやつ --> [% WRAPPER wrapper/hoge title = "呼び出し側から変数を設定出来るよ" -%] <p>ここは普通にテンプレートを書く</p> [% END -%] </code> 出力結果は <code> <html> <head> <title>呼び出し側から変数を設定出来るよ</title> </head> <body> <p>ここは普通にテンプレートを書く</p> </body> </html> </code> Auto Wrapperを使うと、[% WRAPPER %]とか書かなくてもWrapperテンプレートを呼び出してくれる。
catalyst/tt.txt
· 最終更新:
2008/01/24 16:00
by
127.0.0.1
ページ用ツール
文書の表示
以前のリビジョン
バックリンク
文書の先頭へ