template toolkitでWRAPPERするファイルをデフォルトで定義したり条件によって別のファイルを指定したりする
before
header.ttに
<html> 〜〜〜〜〜〜〜〜 </html
とか書いて、全ttに
[%- WRAPPER header.tt -%]
とかいちいち書く
after
wrapper.ttを作成、
[%- app_name = 'アプリの名前' -%] [%- IF template.name.match('^/admin') %] [% base_title = 'uriが/adminから始まるのでここは管理画面的です' %] [%- INCLUDE admin/default/header.tt %] [%- ELSE %] [% base_title = 'ユーザ画面です' %] [%- INCLUDE header.tt %] [%- END %]
header.ttには
[% content -%]
と書いて、各ttでは何も書かずに済むようになった。この[% content -%]に各ttの中身が入る。
URIマッチがアレなのは置いといて。/adminhogeとかでも引っかかる、とか。ちゃんとしたければ変数stashするなり、何かして。
ここでは条件により読み込むヘッダを変えているが、普通はwrapper.ttに [% content -%]
を書いてもいい。
let's do it
- myapp.yaml
View::TT: INCLUDE_PATH: - __path_to(root/template)__ - __path_to(root/template/default)__ TEMPLATE_EXTENSION: '.tt' PRE_PROCESS: macro.txt DEBUG: 1 ABSOLUTE: 1 WRAPPER: __path_to(root/template/default/wrapper.tt)__
WRAPPER: __path_to(root/template/default/wrapper.tt)__
がデフォルトのWRAPPERファイルを指定するところ。
こうしとけば、普段は全てのttはroot/template/default/wrapper.ttをWRAPPERする。
URIが /admin から始まれば、root/template/admin/default/header.ttをWRAPPERする。