SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Webアプリケーションフレームワーク「Catalyst」入門

初めてのCatalyst入門(8)
Catalystのビュープログラミング

Catalystのビューを使って統一的なサイトを構築する


テンプレートファイルで使用可能なディレクティブ

 Catalyst::View::TTで使用可能なディレクティブは、Template::Toolkitのディレクティブがそのまま使えます。テンプレートファイルで記述するディレクティブは[%%]の間に記述します。

INSERT

 INSERTディレクティブでは、指定したファイルの内容を、そのまま挿入します。

[リスト8]INSERTの例
[% INSERT list.txt %]

 上記のように記述した場合、list.txtファイルの中身がそのまま挿入されます。もしINSERTでテンプレートファイルを指定した場合には、テンプレート処理は行われず、ファイルの中身がそのまま挿入されます。

INCLUDE

 INCLUDEディレクティブでは、指定したファイルに対してテンプレートの変換処理を実行した後で、指定した位置に挿入します。

[リスト9]INCLUDEの例
[% INCLUDE header %]

 上記のように記述した場合、headerファイルをテンプレートして処理し、その結果を指定した位置に挿入します。

PROCESS

 PROCESSディレクティブもINCLUDEと同様に、指定したファイルに対してテンプレート処理を行います。それぞれの違いは、INCLUDEでは呼び出し先には変数をコピーして渡しますが、PROCESSではそのまま参照として渡すため、呼び出し先で変数の値を変更した場合には、呼び出し元でも変更された値が返ってきます。

 呼び出し元のテンプレートファイルをtmpl1、呼び出し先のテンプレートファイルをtmpl2として、次のように定義します。

[リスト10]INCLUDE/PROCESSの違い
# tmpl1
[% value = 10 %]
value is [% value %] before tmpl2
[% INCLUDE tmpl2 %]
value is [% value %] after tmpl2

[% value = 10 %]
value is [% value %] before tmpl2
[% PROCESS tmpl2 %]
value is [% value %] after tmpl2

# tmpl2
  value was [% value %] at tmpl2
  [% value = 20 %]
  value is [% value %] at tmpl2

 このテンプレートを実行した結果は、次のようになります。

[リスト11]INCLUDE/PROCESSのサンプル実行結果
value is 10 before tmpl2
  value was 10 at tmpl2
  value is 20 at tmpl2
value is 10 after tmpl2

value is 10 before tmpl2
  value was 10 at tmpl2
  value is 20 at tmpl2
value is 20 after tmpl2
BLOCK

 同じテンプレートの中で、処理をメソッドのように切り分けたい場合などでは、BLOCKディレクティブを使うことができます。BLOCKを定義する場合、処理の終わりではENDを指定します。

[リスト12]BLOCKの例
[% BLOCK tabrow %]
  <tr>
  <td>[% name %]<td>
  <td>[% email %]</td>
  </tr>
[% END %]

<table>
  [% PROCESS tabrow  name='Fred'  email='fred@nowhere.com' %]
  [% PROCESS tabrow  name='Alan'  email='alan@nowhere.com' %]
</table>

 上記の例ではtabrowという名前のついたBLOCKをPROCESSから呼び出しています。PROCESS以外にもINCLUDEや、ここでは説明していませんがWRAPPERディレクティブから呼び出すことができます。また、上記のように引数を指定することもできます。

IF/UNLESS/ELSIF/ELSE

 条件分岐を行う場合には、IFUNLESSディレクティブを使用できます。IFでは条件式が真の場合に、UNLESSでは条件式が偽の場合にその後の実行文に処理が渡ります。複数の条件を扱う場合にはELSIFELSEを使用します。

[リスト13]IF/ELSIF/ELSEの例
[% IF gender == 'male' %]
  [% message = '男の子' %]
[% ELSIF gender == 'female' %]
  [% message = '女の子' %]
[% ELSE %]
  [% message = 'そうでない人' %]
[% END %]
[% message %]

 条件式で使用可能なオペレータは「== != < <= > >= && || ! and or not」です。

 また、条件分岐関連のディレクティブとしては、他にはSWITCH~CASEも使用可能です。

FOREACH

 ループ処理を行うには、FOREACHディレクティブを使用できます。

[リスト14]FOREACHの例
[% items = ['foo', 'bar', 'baz' ] %]
[% FOREACH i IN items %]
  [% i %]
[% END %]

 INの代わりに=を使い、次のように記述することもできます。

[% FOREACH i = items %]

 ループ関連のディレクティブとしては、他にはWHILEも使用可能です。

META

 METAディレクティブを使用すると、テンプレートにメタデータを記述できます。TTSiteヘルパクラスが作成したテンプレートファイルには、メタデータとして「title」が設定されています。

 これはテンプレートファイルによって表示するタイトルを切り替えるために使用しています。

 Template::Toolkitには他にもさまざまなディレクティブが用意されており、今回紹介したもの以外のディレクティブについては、Template::Manual::Directivesを参照ください。

次のページ
簡単なサイトアプリケーション

この記事は参考になりましたか?

Webアプリケーションフレームワーク「Catalyst」入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 花田 善仁(ハナダ ヨシヒト)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4952 2010/06/22 12:59

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー