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 (3627d)