ページテンプレートはページのソースファイルです。ほぼXHTMLに準拠した形で記述します。
後のセクションに挙げた特殊属性をタグに追加することで、ページテンプレートからページ出力を作成する途中でプログラムコードを呼び出したり、特殊な動作を行わせることができます。
span タグと、独自タグである extend タグは他のタグと若干扱いが異なり、ext: が先頭についていない属性が他にない場合はタグ自体が出力されません。
ページテンプレートと出力結果に使うキャラクタセットの判定を以下のように行います。
種類 | 判定方法 |
---|---|
ページテンプレート | テンプレート先頭の<?xml version="1.0" encoding="キャラクタセット "?>があればそれを使います。なければコンフィグレーション設定のテンプレートキャラクタセット指定を使います。 |
出力結果 | ※WebCoreのみ
(SilverGear単体では変換の必要がないため) テンプレートの中で ext:set="HTTP-HEADER" の指定による Content-Type の charset 指定があればそれを使います。なければコンフィグレーション設定の出力キャラクタセット指定を使います。 |
ページテンプレートにDOCTYPEの記述をしておくと、出力のHTML/HTMLフォーマットが自動的に振り分けられます。
種類 | 記述例 |
---|---|
HTML | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
XHTML | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
エラー | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> XMLテンプレートとして不正であるためエラーとなります。 |
タグにつけることができる特殊属性は以下のとおりです。
属性 | 配置可能タグ | 摘要 |
---|---|---|
ext:comment | すべて | タグとその下の構造の出力を抑制します。 |
ext:use | すべて | 値がtrueのとき、タグとその下の構造を出力します。 falseのとき、タグとその下の構造を出力を抑制します。 |
ext:loop | すべて | フォーマットは"コレクションキー[,要素キー]"です。リクエストコンテキストマップに対しコレクションキーで参照したコレクションオブジェクトを要素キーに結び付けてマップに登録し、下の構造を出力します。要素キーは省略できます。 |
ext:wrap | すべて | 値がtrueのとき、タグとその下の構造を出力します。 falseのとき、下の構造だけを出力します。 |
ext:include | span|extend | 値が示すファイルが示すページテンプレートを読み込んで出力します。 |
ext:language | span|extend | 値に指定した言語IDに対応するスクリプトドライバを読み込みます。必ずext:target属性と組にして使います。 |
ext:target | span|extend | 値が示すファイルに書かれたコードを実行します。必ずext:language属性と組にして使います。 |
ext:set | span|extend | SilverGear 単体では値に"DEF"のみが指定できます。 WebCoreとの組み合わせでは"INCLUDE-ONLY"または"HTTP-HEADER"を指定できます。 |
ext:setに指定できる値とその意味は以下のとおりです。"ライブラリ"は、その機能を提供しているライブラリ名を指しています。
extendタグの子要素の部分については、これが記述されているソースをウェブブラウザで直接開いてみるとそのまま表示されますが、これを嫌う場合は、コメントで囲ってもかまいません。ブラウザからは見えなくなりますが、中の設定は認識されます。
値 | 意味 | ライブラリ | 説明 |
---|---|---|---|
DEF | 値の設定(DEFINITION) | SilverGear | リクエストコンテキストマップを変数プールとし、以下のようなLISP風の記述によって若干の変数操作ができます。
<extend ext:set="DEF"> (define flag "true") (define num (* 200 num)) </extend> |
HTTP-HEADER | HTTPヘッダへの値の設定 | WebCore | この記述をページに設定すると、ページの出力がウェブブラウザに返される直前でその設定をHTTPヘッダに反映します。複数の箇所で重複する設定をした場合は上書きされ、後で設定したほうがより有効になります。重複しないものについては前の設定も有効になります。
<extend ext:set="HTTP-HEADER"> Content-Type: text/html; charset=UTF-8 Pragma: no-cache </extend> |
INCLUDE-ONLY | 直接呼び出しの拒否 | WebCore | この記述があるページをウェブブラウザから指定すると、ステータスコード404が返されます。存在しないページへのリクエストと同様の動作になります。 |
ページテンプレートの中に${}で括られた文字列を記入すると、式として評価された結果に置き換えられて出力されます。${}を置ける場所の例は以下のとおりです。
場所 | 例 |
---|---|
テキスト | <td>テキスト${text}</td> |
コメント | <!-- ${comment} コメント --> |
属性値 | <span ext:include="${include}"/> |
置けない場所は以下のようなところです。
場所 | 例 |
---|---|
タグそのもの | <${tag}>contents</${tag}> |
属性そのもの | <hr ${noshade-attribute}/> |
式の形式は以下のようになります。
"${" キー [ "." 参照記述 ]* [ "|" "NOESCAPE" ] [ ";" コメント ] "}"
記述例
${data} ${user.detail.name.0} ${config.parameter; コンフィグパラメータを取得} ${script.body | NOESCAPE ; 結果の中の文字列をエスケープしません}
式を構成する要素の意味は以下のとおりです。
要素 | 摘要 |
---|---|
キー | マップから値を参照する場合のキー文字列です。 |
参照記述 | 値が配列またはリストの場合、整数値を指定して要素を取り出します。 値がマップの場合、get( key ) メソッドで値を取り出します。 その他のオブジェクトの場合は getXXXXX() メソッド(XXXXXは参照記述文字列)で値を取り出します。 シングルクォート、ダブルクォート、セミコロンを含む参照記述が必要とならないように工夫してください。使用すると動作がわかりにくくなります。 空白がある場合には data.'version number' といった具合に参照記述をシングルクォートで囲ってください。 |
NOESCAPE | 評価した結果を出力する場合に&、<、>、 をエスケープしない場合に指定します。 |
コメント | 属性値のにおいてはダブルクォート(")で属性値の記述が終了します。また、閉じ中括弧(})で式が終わるのでうっかり入れてしまわないようにしてください。 |