* TTSiteの基本構造 [#y90bf8a8]
** 構成 [#ab684ce2]
以下のようにヘルパーコマンドを実行する。
script/myapp_create.pl view TT TTSite
すると、以下のような構成のファイル・ディレクトリが作成される。
lib/MyApp/View/TT.pm
root/
src/
static/
lib/
config/
main
col
url
site/
html
layout
wrapper
src/
static/
** lib/MyApp/View/TT.pm [#l288ab5d]
TTインスタンス生成時の設定をする。
package MyApp::View::TT;
use strict;
use base 'Catalyst::View::TT';
__PACKAGE__->config({
CATALYST_VAR => 'c',
PLUGIN_BASE => 'MyApp::TT',
INCLUDE_PATH => [
MyApp->path_to( 'root', 'src' ),
MyApp->path_to( 'root', 'lib' )
],
PRE_PROCESS => 'config/main',
WRAPPER => 'site/wrapper',
ERROR => 'error.tt2',
TIMER => 0,
DEBUG => 'undef',
});
- CATALYST_VARを指定すると、テンプレート内で、"c.config.home"のようにコンテキストオブジェクトを呼び出せる。標準では"Catalyst"なので"c"のように短く書けるようにした。
- DEBUGの指定でundefを有効にした。undef以外の指定も出来る。詳しくはTTのドキュメントを参照すること。
** root/lib/config/main [#lff3308f]
TTインスタンス生成時のPRE_PROCESSの指定により、root/lib/config/mainファイルがロードされる。
[% # config/main
#
# This is the main configuration template which is processed before
# any other page, by virtue of it being defined as a PRE_PROCESS
# template. This is the place to define any extra template variables,
# macros, load plugins, and perform any other template setup.
IF c.debug;
# define a debug() macro directed to Catalyst's log
MACRO debug(message) CALL c.log.debug(message);
END;
# define a data structure to hold sitewide data
base = c.req.base;
site = {
title => 'Example Site',
copyright => 'www.example.com',
base => c.req.base,
};
# set defaults for variables, etc.
DEFAULT
message = 'There is no message';
-%]
- 標準ではroot/lib/config/colとroot/lib/config/urlをロードするようなっている。が、冗長なので、mainにまとめて、configとcolは削除した。
** root/lib/site/wrapper [#pf300f72]
TTインスタンス生成時の設定でWRAPPERが指定されいるので、まずWRAPPERファイル(root/lib/site/wrapper)がロードされる。
[% IF template.name.match('\.(css|js|txt)');
debug("Passing page through as text: $template.name");
content;
ELSE;
debug("Applying HTML page layout wrappers to $template.name\n");
content WRAPPER site/html;
END;
-%]
- テンプレートファイルの拡張子で判断して、処理を変えてある。
- CSSファイル等の場合、そのまま内容が出力される。HTMLファイルの場合、さらにWRAPPERが実行され、site/htmlがロードされる。
- 標準では"content WRAPPER site/html + site/layout"と、site/layoutもロードするが、冗長なので削除した。
- ちなみに、debug()は、root/lib/config/mainで定義してあるMACRO。
** root/src/***.tt2 statc/***.css [#z51b9e64]
Catalyst本体で指定したテンプレートファイルがロードされる。