TTSiteの基本構造

構成

以下のようにヘルパーコマンドを実行する。

 script/myapp_create.pl view TT TTSite

すると、以下のような構成のファイル・ディレクトリが作成される。

 lib/MyApp/View/TT.pm
 root/
   src/
   static/
   lib/
     config/
       main
       col
       url
     site/
       html
       layout
       wrapper

lib/MyApp/View/TT.pm

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

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

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

Catalyst本体で指定したテンプレートファイルがロードされる。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS

Last-modified: 2008-11-17 (月) 16:32:11