Play framework

テンプレートエンジン

Play!のテンプレートエンジンの動的な要素は、Groovy言語を使用している。

目次

${…}

  • 式の宣言を行う。{}内の式を評価した結果を出力する。
  • 例1) 変数名を記述すると、その内容が出力される。
    <h1>${myName}さん、こんにちは。</h1>
  • 例2) 変数が空の場合の値を指定することができる。
    <h1>${myName ?:名無し}さん、こんにちは。</h1>

#{extends /}と#{doLayout /}

  • テンプレートファイルの継承を行う。共通部をスマートに記述できる。
  • 共通部を記述したshare.htmlを利用する場合、派生ページの先頭に下記のように記述する。
    #{extends 'share.html'/}
    一方、share.html側では、派生ページを挿入したい部分に下記のように記述する。
    #{doLayout /}
  • 派生ページから共通部へ変数を受け渡したい場合は、#{set} #{get}タグを用いる。
  • 共通部ファイルの例
    <!DOCTYPE html>
    
    <html>
        <head>
            <title>#{get 'title' /}</title>
            <meta charset="${_response_encoding}">
            <link rel="stylesheet" media="screen" href="@{'/public/stylesheets/main.css'}">
            #{get 'moreStyles' /}
            <link rel="shortcut icon" type="image/png" href="@{'/public/images/favicon.png'}">
            <script src="@{'/public/javascripts/jquery-1.5.2.min.js'}" type="text/javascript" charset="${_response_encoding}"></script>
            #{get 'moreScripts' /}
        </head>
        <body>
            #{doLayout /}
        </body>
    </html>
    'title'や'moreScripts'といった変数があることを前提として書かれている。'moreStyles'の設定例を書いておく。
    #{set 'moreStyles'}
      #{stylesheet 'mystyle.css' /}
    #{/set}
    
    タイトルのように1タグで記述する方法もあるが、”や’を含む文字列を変数へ設定する場合は、タグで挟む方法が有効。
  • 派生ページの例)
    #{extends 'share.html'}
    #{set title:'Another page'}
    
    <h1>テストページ</h1>
    派生ページからは、'title'という変数が受け渡されている。
  • doLayoutで差し込まれる部分についてのタグ評価は、実際に差し込まれる前に行われる。したがってタグの親子関係や順序が重要な要素を差し込む場合はうまくいかない。このような場合は、#{include ''/}タグで動的にファイル名を生成して差し込む方式にするとよい。

#{include /}

  • 指定したファイルをタグの位置に読み込む。ファイル内のタグは読み込み時に評価される。
    #{include 'share.html' /}
  • ファイル名を動的に生成することも可能。
    #{include 'test'+id+'.html' /}
  • ファイルが存在しないとレンダリング中にエラーとなってしまうので対策を講じる。

#{list /}

  • 配列やコレクションを繰返し展開するタグ。itemsにコレクション名を指定。asに1件ごとのデータを受け取るローカルな変数名を指定。
    #{list items:'listItems', as:'item' }<a href="item.link'>${item.caption}</a>{/list}
  • asで指定した変数名に加えて、自動で便利なステータスを取得することができる。
    item_indexループ回数。1スタート
    item_isLast最後の要素の場合 True。
    item_isFirst最初の要素の場合 True。
    item_parity偶数行の場合は even、奇数行の場合は odd。
  • #{else/}タグと組み合わせるとリストに要素が無い場合の出力を定義することができる。

@{…} または @@{…}

  • routerファイルの定義をもとに、URLを逆生成する。
    <a href="@{Application.show()}">見る</a>
    Applicationクラスのshow()メソッドが応答するためのURLに置き換えられる。
  • @{…}は相対URL、@@{…}は絶対URLを生成する。

&{…}

  • 国際化対応を行う箇所に使用する。

*{…}*

  • コメント記述用。

%{…}%

  • スクリプト記述用。Groovyで。

暗黙のオブジェクト

変数説明
errorsバリデーションエラー
flashフラッシュスコープ
lang現在の言語
messagesメッセージのマップ
out出力ストリーム
param現在のパラメータ
playフレームワークの中心クラス
request現在のhttpリクエスト
sessionセッションスコープ

カスタムタグ

  • オリジナルのタグが作成できる。
  • 中身はテンプレートエンジンで処理できる形式で記述し、その処理結果がそのまま出力となる。
  • ファイルは、「app/views/tags/タグ名.html」に配置する。
  • 種類は2タイプ。
    • 1タグで完結するタイプ。下記形式で使用する。
      #{タグ名 arg1:'引数1', arg2:'引数2', arg3:'引数3' /}
      
      タグ名.html内で引数を扱う場合は、アンダースコアを付けることで通常変数と同じ扱いとなる。もちろん、引数は必須ではない。例)
      <h2>${_arg1}と${_arg2}は、${_arg3}です。</h2>
      
    • 開始タグと終了タグで挟むタイプ。下記形式で使用する。
      #{タグ名}
      こんにちは!
      #{/タグ名}
      
      タグで挟まれた部分を、#{doBody /}タグにより取りだせる。例)
      <h2>挨拶は、#{doBody /}だ!!</h2>
      
    • 上記の2タイプの合わせ技も可能。
      #{タグ名 arg:'#ff0099'}
      ピンク色?
      #{/タグ名}
      
      引数を指定しつつ、タグで挟むことができる。
      <font color="${_arg}">#{doBody /}</font>

Groovyエクステンション

  • よくある書式変換が標準で揃っている。超便利。
  • 数値のカンマ区切りなどはDecimalFormatクラスを利用した書式指定ができる。
    コストは、${ cost.format("###,###.##") }円です。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-11-05 (月) 17:21:30 (2536d)