プレースホルダのデフォルトの書式は
{[0-9A-Za-z_-]+} |
プレースホルダに実際の値を設定するには、 setVariable() および setGlobalVariable() メソッドを使用します。値を設定していないプレースホルダは、 デフォルトでは出力時に削除されます。
ブロックの書式は
<!-- BEGIN [0-9A-Za-z_-]+ --> ... ブロックの内容 ... <!-- END [0-9A-Za-z_-]+ --> |
ブロックは入れ子にすることができます。しかし、パース時には注意しましょう。 まず、もっとも内側にあるブロックから parse() し、それから順に外側に向かって処理を進めていく必要があります。
Sigma においては、テンプレート全体が "__global__" という仮想ブロックとして扱われます。 大半のブロック関連の関数は、このブロック名をデフォルトで使用します。
テンプレートの内容を、他のテンプレートファイルから読み込むには <!-- INCLUDE filename --> 文を使用します。
... 何らかの内容 ... <!-- INCLUDE filename.html --> ... さらに何らかの内容 ... |
注意すべき点をまとめます。
<!-- INCLUDE --> 文が処理されるのは、 テンプレートファイルをディスクから読み込んだ場合のみです。 setTemplate() メソッドでテンプレートを設定したり addBlock() と replaceBlock() でブロックとして動作させたりする場合は、テンプレート内にある <!-- INCLUDE --> 文の置換は行われません!
この機能は addBlockfile() を用いて実装されていますが、addBlockfile() とは異なり、新しいブロックをテンプレート内で作成することはできません。
<!-- INCLUDE --> 文は、変数の置換が行われる前に処理されます。つまり、 <!-- INCLUDE {placeholder} --> は期待通りに動作しません。もちろん、実際に {placeholder} という名前のファイルがあって、 それを読み込みたいのなら別ですが (実際はそんなことはないでしょう)。
Sigma テンプレートには、単純な関数コールを含めることができます。 つまり、テンプレートの作者が特別なプレースホルダを追加できるということです。
... 何らかの内容 ... func_h1("embedded in h1") ... さらに何らかの内容 ... |
関数名の書式は、次のようになります。
func_[_a-zA-Z]+[A-Za-z_0-9]* |
func_translate('Hello, {username}') |
注意 この節の情報は、HTML_Template_Sigma バージョン 1.1.2 以降に適用されます。 それ以前のバージョンを使っていてテンプレート関数の引数で問題が発生した場合は、 アップグレードしてください。
関数の引数のクォートは必須ではありません。 以下のような使用法も可能です
func_uppercase(クォートしていないテキスト) |
次に考慮する必要があるのは、HTML_Template_Sigma が対象としているのが HTML の生成であるということです。 つまり、引数内のクォートされた文字列は、多くの場合にタグの属性となります。 これらの文字列内ではカンマや括弧はパースされません。 そのため、以下の例もテンプレート関数として有効なものになります。
func_foo(<a href="javascript:foo(bar, baz)">Do foo</a>) |
最後に、引数が空の文字列である場合や、前後に空白を含む引数を使用する場合にも 引数をクォートしなければなりません (クォートしなければ、 引数の前後の空白は削除されます)。
引数のクォートには、シングルクォートあるいはダブルクォートのどちらでも使用できます。 引数の中に同じ型のクォートが含まれている場合は、バックスラッシュ '\' を使用してそれをエスケープしなければなりません。 バックスラッシュ記号自身もまたエスケープする必要があります。
func_foo('O\'really') func_foo('AC\\DC') |
例 47-1テンプレート関数の引数として有効あるいは無効なもの
|
リリース 1.1.0 以降では、
func_callback({var}) |
{var:callback} |
'h' は htmlspecialchars() と同じです。
'e' は htmlentities() と同じです (リリース 1.2.0 以降で使用可能)。
'u' は urlencode() と同じです。
'r' は rawurlencode() と同じです (リリース 1.2.0 以降で使用可能)。
'j' は Sigma のメソッドで、文字列をエスケープして Javascript の文字列定数として使用できるようにします。
したがって、プレースホルダ {var:h} をテンプレートに追加すると、var の中の安全でない文字が HTML エンティティに置き換えられます。
リリース 1.2.0 以降、'h' コールバックおよび 'e' コールバック用のパラメータ charset を setOption() で指定できるようになりました。
リリース 1.2.0 以降、コメントをテンプレートファイルに追加できるようになりました。
<!-- COMMENT --> Some text here <!-- /COMMENT --> |
その他の使用例 パッケージのアーカイブにいくつかの使用例が含まれており、 その機能の大半については網羅されています。 それらのサンプルを見ながらドキュメントを読んでいくといいでしょう。
例 47-2テンプレートファイル table.html
|
例 47-3テンプレートファイル table_header.html
|
例 47-4スクリプト
|
例 47-5出力
|