Templates

Play 1.2.x

Template – Implicit objects

errors
コントローラで発生した検証エラー

flash
flash スコープ

lang
通信に使用されている言語

messages
ローカライズされたメッセージの map

out
The output stream writer

params
パラメータ

play
フレームワークのメインのクラス

request
HTTP リクエスト

session
セッションスコープ

Template – Tag grammar

${ client.name }
変数を評価し出力します。

${ client?.name }
client が null でなければ client.name を表示します。

@{ Controller.action() }
アクションへの相対パスの URL を計算します。

@{ Controller.action().secure() }
アクションへの HTTPS での相対パスの URL を計算します。

@@{ Controller.action() }
アクションへの絶対パスの URL を計算します。

@{'path/to/static_content'}
<img src="@{'/public/images/jpdf.png'}" class="center"/>

&{ message.key }
メッセージは conf/messages で管理され、多言語対応しています。

∗{ これはコメントです }∗
これ以上何を言えばいい?

%{ out.print("HelloWorld") }%
UI ロジック用の Groovy スクリプト

#{ my.custom.tag /}
典型的なカスタムタグ - page コンテキストは共有しません。

Template – Standard Tags

#{extends ʻpage.htmlʼ/}
#{doLayout /}
マスタテンプレートのデコレータ

#{get 'title'}Used if title not set#{/get}
#{set title:ʻHome Pageʼ}
ページとマスタテンプレート間で共有される変数

#{include 'tree.html'/}
ページの断片をインクルードします。 - page コンテキストは共有されます。

#{script id:'myscript' , src:ʻscript.js', charset:'utf-8' /}
#{stylesheet id:'main', media:'print', src:'print.css' /}
スクリプトとスタイルシートをインポートします。

#{a @Application.logout() }Disconnect#{/a}
#{form @Client.create() , id:'form' enctype:'multipart/form-
data' } ... #{/form}
アンカーやフォームを作るのに便利なタグ

#{verbatim}${'&'}#{/verbatim}
HTML エスケープを無効化します。

#{i18n /}
ローカライズされたメッセージを Javascript にエクスポートします。

#{ifErrors} <p>Error(s) found!</p> #{/ifErrors}
検証エラーをチェックします。

#{ifError 'user.name'} #{error 'user.name' /} #{/ifError}
指定されたエラーをチェックします。

#{errors} <li>${error}</li> #{/errors}
検証エラーを繰り返し処理します。

#{if cond}...#{/if}#{elseif cond}...#{/elseif}#{else}...#{/else}
#{ifnot cond}...#{/ifnot}
条件構文

#{list items:0..10, as:'i'}${i}#{/list}
#{list items:'a'..'z', as:'l'}${l} ${l_isLast ?'':'|' }#{/list}
#{list users}${_}#{/list}
ループ構文

#{list items:task, as:'task'}${task}#{/list}
#{else}No tasks on the list#{/else}
Tip: else は list と一緒に使えます。

#{cache ʻkeyʼ, for:ʼ15minʼ}...#{/cache}
15 分間コンテンツをキャッシュします。

Template – Custom Tags

@FastTags.Namespace("domain")
public class RecaptchaTag extends FastTags {
public static void _recaptcha(Map args, Closure body, PrintWriter out, ExecutableTemplate template, int fromLine) { …

/app/view/tags/domain/mytag.tag
カスタムタグは {#domain.mytag/} で呼び出せます。

Template – Groovy extension

${ ['red', 'green', 'blue'].join('/') }
red/green/blue

${ (["red", "green", "blue"] as String[]).add('pink').join(' ') }
red green blue pink

${ (['red', 'green', 'blue'] as String[]).contains('green') }
true

${(['red', 'gr', 'blue'] as String[]).remove('gr').join(' ')}
red blue

${ ['red', 'green', 'blue'].last() }
blue

${ new Date(new Date().getTime() - 1000000).since() }
16 分前

${new Date(1275910970000).format('dd MMMM yyyy
hh:mm:ss')}
07 June 2010 01:42:50

${ 1275910970000.asdate('dd MMMM yyyy hh:mm:ss') }
07 June 2010 01:42:50

${726016L.formatSize()}
709KB

${ 42.formatCurrency('EUR').raw() }
&euro; 42.00

${ 42.page(10) }
5

journ${ ['cnn', 'c+', 'f2'].pluralize('al', 'aux') }
journaux

${ "lorum ipsum dolor".capAll() }
Lorum Ipsum Dolor

${ "lorum ipsum dolor".camelCase() }
LorumIpsumDolor

${ "lorum ipsum dolor".capFirst() }
Lorum ipsum dolor

${ "lorum ipsum dolor".cut('um') }
lor ips dolor

${ "The <blink>tag</blink> is evil".escape().raw() }
The &lt;blink&gt;tag&lt;/blink&gt; is evil

${ "one\ntwo".nl2br() }
one<br/>two

${ '<' } ${ '<'.raw() }
&lt; <

${ " (') (\") ".escapeJavaScript().raw() }
(\') (\")

${ "".yesno('yes', 'no') }
no

${ "not empty".yesno('yes', 'no') }
yes

${"Stéphane Épardaud".noAccents()}
Stephane Epardaud

${ "The Play! frameworkʼs manual".slugify() }
the-play-framework-s-manual

${ "x".pad(4).raw() }
x&nbsp;&nbsp;&nbsp;