| ユーザフォーラムで議論/質問 | マニュアル検索 | ハイライト | ハイライトオフ | ポータル | php spot |
導入 - テンプレートの構文導入 - テンプレートの構文 – テンプレートの作成および編集
プレースホルダプレースホルダのデフォルトの書式は {[0-9A-Za-z_-]+} です。つまり、プレースホルダの名前には、 大文字と小文字そしてアンダースコアとハイフンが使用できるということです。 名前は、波括弧の間にスペースなしで配置しなければなりません。 プレースホルダに実際の値を設定するには、 setVariable() および setGlobalVariable() メソッドを使用します。値を設定していないプレースホルダは、 デフォルトでは出力時に削除されます。 ブロックブロックの書式は <!-- BEGIN [0-9A-Za-z_-]+ --> ... ブロックの内容 ... <!-- END [0-9A-Za-z_-]+ --> となります。ブロック名についての規則は、プレースホルダと同じです。 プレースホルダとは対照的に、ブロックのマークアップ内ではスペースが必要です。 ブロックは入れ子にすることができます。しかし、パース時には注意しましょう。 まず、もっとも内側にあるブロックから parse() し、それから順に外側に向かって処理を進めていく必要があります。 Sigma においては、テンプレート全体が "__global__" という仮想ブロックとして扱われます。 大半のブロック関連の関数は、このブロック名をデフォルトで使用します。 <!-- INCLUDE --> 文テンプレートの内容を、他のテンプレートファイルから読み込むには <!-- INCLUDE filename --> 文を使用します。 ... 何らかの内容 ... <!-- INCLUDE filename.html --> ... さらに何らかの内容 ... このようなテンプレートファイルが読み込まれると、 <!-- INCLUDE filename.html --> の部分が filename.html の内容で置き換えられます。 注意すべき点をまとめます。
テンプレート関数Sigma テンプレートには、単純な関数コールを含めることができます。 つまり、テンプレートの作者が特別なプレースホルダを追加できるということです。 ... 何らかの内容 ... func_h1("embedded in h1") ... さらに何らかの内容 ... Sigma はこれらのプレースホルダを含むテンプレートをパースし、 setCallbackFunction() でコールバック関数を定義できるようにします。 コールバックは、このような関数コールを含むブロックが parse() された場合に自動的にコールされます。 関数名の書式は、次のようになります。 func_[_a-zA-Z]+[A-Za-z_0-9]* つまり、最初は必ず 'func_' で始まり、次に英字あるいはアンダースコアが続き、 その後は英数字あるいはアンダースコアとなります。 テンプレート関数の引数には、変数のプレースホルダを含めることができます。 func_translate('Hello, {username}') しかし、ブロックや他の関数コールを含めることはできません。 テンプレート関数の引数のクォート
関数の引数のクォートは必須ではありません。 以下のような使用法も可能です 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') これは、O'really および AC\DC を関連するコールバックに渡します。 テンプレート関数の引数として有効あるいは無効なもの 有効な引数: func_foo(Some unquoted text) func_foo("Some quoted text") func_foo(<a href="javascript:foo(bar, baz)">Do foo</a>) func_foo('O\'really') func_foo('AC\\DC') 無効な引数: func_foo(Hello, {username}) カンマを含んでおり、ふたつの引数とみなされます func_foo(O'really) マッチするシングルクォートがありません func_foo('O'really') マッチするシングルクォートがありません func_foo(, 'whatever') 空の引数はクォートしなければいけません テンプレート関数の省略形リリース 1.1.0 以降では、 func_callback({var}) と書くかわりに {var:callback} とすることができます。自動的に登録されるテンプレート関数には次の三種類があります。
したがって、プレースホルダ {var:h} をテンプレートに追加すると、var の中の安全でない文字が HTML エンティティに置き換えられます。 リリース 1.2.0 以降、'h' コールバックおよび 'e' コールバック用のパラメータ charset を setOption() で指定できるようになりました。 テンプレートのコメントリリース 1.2.0 以降、コメントをテンプレートファイルに追加できるようになりました。 <!-- COMMENT --> Some text here <!-- /COMMENT --> このコメントは出力からは削除されます。この点が通常の HTML のコメントとは異なります。 使用例
テンプレートファイル table.html <html> <body> <table cellpadding="2" cellspacing="0" border="1"> <!-- INCLUDE table_header.html --> <!-- BEGIN table_row --> <tr> <td bgcolor="func_bgcolor('#CCCCCC', '#F0F0F0')">{first_name}</td> <td bgcolor="func_bgcolor('#CCCCCC', '#F0F0F0')">{last_name}</td> </tr> <!-- END table_row --> </table> </body> </html> テンプレートファイル table_header.html <!-- COMMENT --> This text will not appear in output. <!-- /COMMENT --> <tr> <th>First name</th> <th>Last name</th> </tr> スクリプト
<?php
出力 <html> <body> <table cellpadding="2" cellspacing="0" border="1"> <tr> <th>First name</th> <th>Last name</th> </tr> <tr> <td bgcolor="#CCCCCC">Stig</td> <td bgcolor="#CCCCCC">Bakken</td> </tr> <tr> <td bgcolor="#F0F0F0">Martin</td> <td bgcolor="#F0F0F0">Jansen</td> </tr> <tr> <td bgcolor="#CCCCCC">Alexander</td> <td bgcolor="#CCCCCC">Merz</td> </tr> </table> </body> </html> |
各種マニュアル:
PHPマニュアル |
PEARマニュアル |
Smarty(英語)マニュアル |
PHP-GTKマニュアル |
「導入 - テンプレートの構文」をGoogle検索
|