ClearSilverテンプレート
Neotonic ClearSilverテンプレート・ファイル(通常、拡張子は.cstまたは.csを使用)は、埋め込まれたClearSilverのテンプレートコマンドを使用したテキストから成ります。
組み込みコマンドの構文は、”<? ?>“タグを使用しており、他の多くのHTMLマクロ/テンプレートシステムに似ています。
ClearSilverコマンドは開始区切り文字が “<?cs“、次にコマンド指定、コマンドパラメータを記述し、最後に終了区切り文字が “?>“になります。
テンプレートコマンド:
置き換え:var, evar, lvar, include, linclude, set, name
フロー制御:if, else, elif, alt
繰り返し:each, loop, with
マクロ(関数): def, call
すべてのフロー制御、繰り返し、およびDEFコマンドはちょうどHTMLのように、対応する終了コマンドを持っている。ifの場合は、/ifが対応しています。
ほとんどのコマンドは、引数として1つ以上の式を取る。
また、Clearsilverは#(ハッシュ)文字を使用して、コメントをサポートしています。<?cs # this is a comment ?>
置換
次のコマンドで単純な変数置換がで行われます。
<?cs var:Page.Name ?>
これは、コマンドはVARで、パラメータがVARの名前、すなわちPage.Nameです。
evarは、データセットの変数の値もClearSilverコマンドに対して解析されることを除いて、VARのようなものです。このEVARの解析は、CSテンプレートのロードと解析中に発生します。その結果、表示を開始する前に、構文エラーが報告され、EVARは、各ループ内の要素を表示するために使用することができません。
lvarデータセットの変数の値がレンダリング時間に解析されることを除いて、EVARのようなものです、時間を解析できません。構文エラーは、レンダリング時に報告されます。あなたの出力をバッファリングしていない場合、これは部分的なページレンダリングが発生します。 CGIキットは、常にその出力をバッファします。
nameはデータセットの最下部の名前に置き換えられます。これは、反復またはエイリアス変数の名前で特定の意味を持たせることができ、マクロ展開中に最も有用である。 (後の例へのポインタ)。 <?cs name:Page.Name ?> これは <?cs var:name(Page.Name) ?>に相当します。ローカル変数に使用された場合、これはローカル変数がマップされている変数の名前を返すことにも注意してください。
includeは別のCSファイルをインクルード(および解析し)ます。inclueのパラメータは、文字列または変数のいずれかになります。文字列は二重引用符で表されます。<?cs include:”header.cs”> ファイルがHDF検索パスに検索されます。注意:これは、ロード/解析時に起こるため、あなたはそれぞれのローカル変数を使用することはできません。これはまた、フロー制御(if/else)を使用すると、ファイルがロードされて、解析されるかどうかへの影響を持っていないことを意味します、それは常にロードされて、解析されます。
lincludeはincludeに似ていますが、ロード/解析は、レンダリング時に発生します。ローカル変数は、ファイル名を指定するために使用することができ、条件変数は、ファイルの読み込みを防止するために用いることができる。しかしローカル変数はlincludeファイルに渡されません。 LVARのように、エラーがレンダリング時に報告されます。
setは、データセット内の値を設定します。セットの構文はかなり複雑です。一般的には、setコマンドは、必要な場合にのみ使用してください:データセットのほとんどは、HDF APIを介して静的HDFファイルで、またはCGIのいずれかで指定する必要があります。典型的には、設定コマンド、すなわち列数に要素のセットを分割するための、または反復中の任意の一致があったかどうかを決定するため、書式設定のために使用される。 (後の例へのポインタ)
setコマンドを使用すると、設定しているHDF値、および値を決定するために評価される式で構成されています。たとえば、次のように<?cs set:Page.Title = “The Title is ” + Page.Menu.0.Name ?>
フロー制御
Neotonic ClearSilverはフロー制御に if/elif/else が用意されています。 ifとelifの引数はブールとして評価される。そこで、以下のifコマンドは常にtrueと評価されます。
<?cs if:#1 ?> <?cs /if ?>
終了時に /if コマンドを使うことに注意してください。
altは if var else の場合の短い手である。 altの引数がtrueの場合、引数を表示し、そうでない場合altタグの内容が表示されます。これら二つは同じです:
<?cs alt:my_text ?>There is nothing to see here<?cs /alt ?> <?cs if:my_text ?><?cs var:my_text<?cs else ?>There is nothing to see here<?cs /if ?>
反復
CSマクロのレンダリング実行中の「安全性」の一環として、サポートされている唯一の反復は、有限であることが保証されています。反復コマンドは、eachです。eachはデータセットのノードの子のすべてに反復処理します。たとえば、次のデータセットを考慮してください。
Page { Access = Public Content = myword.cs Menu { 0 { Name = Home URL = / } 1 { Name = Preferences URL = /prefs } 2 { Name = Help URL = /help.html } 3 { Name = Support URL = /feedback/ } } }
eachをPageに使用すると、Page.Access、Page.Content、およびPage.Menuを反復することになる。 Page.Menu上でeachを使用すると、Page.Menu.0、Page.Menu.1、Page.Menu.2、Page.Menu.3を反復処理します。たとえば、メニューを表示するには、次の操作を行うことがあります。
<?cs each:item = Page.Menu ?> <?cs name:item ?> - <a href="<?cs var:item.URL ?>"> <?cs var:item.Name ?></a><br> <?cs /each ?>
これは(いくつかの追加の空白で)次のHTMLスニペットで結果:
0 - <a href="/">Home</a><br> 1 - <a href="/prefs">Preferences</a><br> 2 - <a href="/help.html">Help</a><br> 3 - <a href="/feedback/">Support</a><br>
あなたが実際にPage.Menu.0を使用していたかのようにローカル変数が、この場合は項目に、全く同じ動作をすることに注意してください、あなたは簡単にそこからデータセットのサブ要素にアクセスすることができます。
nameコマンドを使用すると、ローカル変数がポイントしている子の名前にアクセスします。
withはオペランドとパスカルに似ています。それは、代わりに変数を反復のを除いて、それは別の変数名によってその変数へのアクセスを可能にする、それぞれに似ています。概念的には、あなたはまた、スコープ変数のポインタと考えることができます。あなたは、インスタンスのために、複雑な構文からなる長い変数名を持っているとき、これは通常、最も便利である:
<?cs with:item = Page.Menu[Query.foo - #1] ?> <?cs name:item ?> - <a href="<?cs var:item.URL ?>"> <?cs var:item.Name ?></a><br> <?cs /with ?>
その結果(if Query.foo == 3)(追加の空白文字で):
2 - <a href="/help.html">Help</a><br>
loopは、数値のループを作成するために使用される。loopへの引数は、開始番号、終了番号、およびステップである。 ClearSilverはいつもそれが終了することを保証するために、ループ式を評価します。あなたが負のステップ値を使用しますが、終了番号は開始番号よりも大きい場合、インスタンスの場合は、ClearSilverが自動的に開始と終了の番号が切り替わります。式は一度だけ評価されているので、ループ内の変数を変更しても影響を与えています。いくつかの簡単な例:
<?cs loop:x = #1, #5, #2 ?><?cs var:x ?>, <?cs /loop ?> 1, 3, 5 <?cs loop:x = #1, #205, #2 ?><?cs var:x ?>, <?cs /loop ?> 1, 3, 5... 205
後方
<?cs loop:x = #205, #1, "-2" ?><?cs var:x ?>, <?cs /loop ?> 205, 203, 201, ... 1
前:HDFデータセット