Template Usage : テンプレート記法

UP PREV NEXT

テンプレート

HTML/XHTML/XML、またはプレーンテキストファイル

テンプレートファイルはドキュメント内に書くのではなく、別のファイルとして用意します。
そのため、表示内様に変更があったり、複数のテンプレートを使うときにテンプレートの記述位置をさがす必要もありませんし、テンプレート以外の部分を間違えて変更するなどのミスも防げます。

テンプレートには {tpl: から始まり } で終わる部分にJavaScriptオブジェクト(JSON)のプロパティが適用されます。
: で始まるいくつかのキーワードがスクリプト内で使用されます。

---- サンプル .1 ----

名前は{tpl:name}です。
{tpl::repeat} {tpl::endrepeat}
{tpl::if=id==2}IDは2です {tpl::endif}

UP PREV NEXT

変数表示

  • {tpl:var}

オブジェクトのプロパティーを代入します。
Templateで使用するキーワードと区別するため、区切り文字の : は 1つです。

---- サンプル .1 ----

template

<p>{tpl:item}</p>

script

data={item:'今日の天気は晴れ'};
html=Template.GetHTML(id, data);

出力

<p>今日の天気は晴れ</p>

UP PREV NEXT

繰り返し repeat endrepeat

  • {tpl::repeat= expr }
  • {tpl::endrepeat}

JavaScriptオブジェクトの階層下の配列を、その配列の個数文だけ繰り返します。
exprはオブジェクトの階層をディレクトリと見たてた / 区切りです。

---- サンプル .1 ----

template.tpl

{tpl::repeat=/students}
<tr><td>{tpl:sid}</td><td>{tpl:name}</td></tr>
{tpl::endrepeat} {tpl::repeatend}

script

data={students:[
  {sid:1, name:'Joe'}
 ,{sid:2, name:'Peat'}
]};
html=Template.GetHTML(id, data);

出力

<tr><td>1</td><td>Joe</td></tr>
<tr><td>2</td><td>Peat</td></tr>

---- サンプル .2 ----

repeatがネストしている場合は、exprは上位repeatで指定されたプロパティがrepeatのルートディレクトリに使われます。

template.tpl

{tpl::repeat=/classes}
<tbody>
{tpl::repeat=/students}
<tr><td>{tpl:sid}</td><td>{tpl:name}</th></tr>
{tpl::endrepeat}
</tbody>
{tpl::endrepeat}

script

data={
  classes:[
     {students:[
       {sid:11, name:'Joe'}
      ,{sid:12, name:'Peat'}
     ]}
    ,{students:[
      {sid:21, name:'Mina'}
     ,{sid:22, name:'Cindy'}
     ]}
  ]};

出力


<tbody>
<tr><td>11</td><td>Joe</td></tr>
<tr><td>12</td><td>Peat</td></tr>
</tbody>
<tbody>
<tr><td>21</td><td>Mina</td></tr>
<tr><td>22</td><td>Cindy</td></tr>
</tbody>

UP PREV NEXT

奇数/偶数 evenodd

  • {tpl::evenodd = num }

numは数値を指定可能。
repeatの内部で使用すると、"odd"と"even"が交互に出力されます。
numが2の場合は"even"と"odd"を出力します。
3以上の場合に "odd"の後ろに1からの連番が付きます。

2が指定、または省略した場合は odd、even
3が指定された場合はodd1、odd2、even
4が指定された場合はodd1、odd2、odd3、even
という繰り返しになります。

repeatの外で指定すると、常にoddとなります。

---- サンプル .1----

evenodd の引数なし

{tpl::repeat=students}
<tr class="{tpl::evenodd}"><td>{tpl:id}</td><td>{tpl:name}</td></tr>
{tpl::endrepeat}

出力

<tr class="odd"><td>id1</td><td>name1</td></tr>
<tr class="even"><td>id2</td><td>name2</td></tr>
<tr class="odd"><td>id3</td><td>name3</td></tr>
<tr class="even"><td>id4</td><td>name4</td></tr>

---- サンプル .2----

evenodd の引数に3を指定

{tpl::repeat=students}
<tr class="{tpl::evenodd=3}"><td>{tpl:id}</td><td>{tpl:name}</td></tr>
{tpl::endrepeat}

出力

<tr class="odd1"><td>id1</td><td>name1</td></tr>
<tr class="odd2"><td>id2</td><td>name2</td></tr>
<tr class="even"><td>id3</td><td>name3</td></tr>
<tr class="odd1"><td>id4</td><td>name4</td></tr>

UP PREV NEXT

条件分岐 if elif else endif

  • {tpl::if = expr>
  • {tpl::elif = expr>
  • {tpl::else>
  • {tpl::endif>

{tpl::if=left==right} の形式、または {tpl::if=expr}の形式で記述

左辺、右辺がある時の比較式は == または !=
単項式の場合は booleanとして判断します。
計算に使用出来る演算子は + - * / % ( )
% は割算の”あまり”です。
0除算は0となります。

全て数値計算ですが、それぞれの式の中に数字以外の文字があると、
オブジェクトのプロパティーと見なし、その値を代入します。
オブジェクトのプロパティーにその値がなければ0とみなします。
/ を区切りとしてオブジェクトのプロパティーツリーを追うことが出来ますが、割り算と区別するためにクォートして下さい。

---- サンプル .1----

{tpl::repeat=/students}
<tr>
    <td>{tpl::if="birth/month"==4}誕生月{tpl::else}&nbsp;{tpl::endif}</td>
    <td>{tpl:id}</td><td>{tpl:name}</td></tr>
{tpl::endrepeat}

script

data={students:[
         {sid:1, name:'Joe', birth: {month:'3', day: '12}, sex: 1}
        ,{sid:2, name:'Peat', birth: {month:'4', day: '21}, sex: 1}
        ,{sid:3, name:'Mina', birth: {month:'6', day: '21}, sex: 2}
        ,{sid:4, name:'Cindy', birth: {month:'12', day: '2}, sex: 2}
    ]};
html=Template.GetHTML(id, data);

出力

<tr><td>&nbsp;</td><td>1</td><td>name1</td></tr>
<tr><td>誕生月</td><td>2</td><td>name2</td></tr>
<tr><td>&nbsp;</td><td>3</td><td>name3</td></tr>
<tr><td>&nbsp;</td><td>4</td><td>name4</td></tr>

リピートカウンター repeatcount

{tpl::repeat}の中にある条件分岐の計算式に使用できる繰り返しのカウンターです。
{tpl::repeat}ではテーブルの行を何度も書き出すなど、繰り返しを行いますので、その「何行目」にあたります。

---- サンプル .2----

{tpl::repeat=/students}
<tr>
    <td>{tpl::if=repeatcount==2}2行目{tpl::else}&nbsp;{tpl::endif}</td>
    <td>{tpl:id}</td><td>{tpl:name}</td></tr>
{tpl::endrepeat}

script

data={students:[
         {sid:1, name:'Joe', birth: {month:'3', day: '12}, sex: 1}
        ,{sid:2, name:'Peat', birth: {month:'4', day: '21}, sex: 1}
        ,{sid:3, name:'Mina', birth: {month:'6', day: '21}, sex: 2}
        ,{sid:4, name:'Cindy', birth: {month:'12', day: '2}, sex: 2}
    ]};

出力

<tr><td>&nbsp;</td><td>1</td><td>name1</td></tr>
<tr><td>2行目</td><td>2</td><td>name2</td></tr>
<tr><td>&nbsp;</td><td>3</td><td>name3</td></tr>
<tr><td>&nbsp;</td><td>4</td><td>name4</td></tr>

---- サンプル .2----

<table>
{tpl::repeat=user}
{tpl::if=(repeatcount-1)%3==0}
<tr><th>名前</th><th>住所</th></tr>
{tpl::endif}
<tr class="{tpl::evenodd}">
<td>{tpl:name}</td><td>{tpl:addr}</td>
</tr>
{tpl::endrepeat}
</table>

script

data={user:[
       { name:'神崎',addr:'真栄田町'}
      ,{ name:'土居',addr:'北町'}
      ,{ name:'岸辺',addr:'西町'}
      ,{ name:'岡田',addr:'中倉町'}
      ,{ name:'岡本',addr:'藤が丘町'}
      ,{ name:'長井',addr:'北川町'}
      ,{ name:'松田',addr:'井手町'}
      ,{ name:'前田',addr:'真栄田町'}
  ]};

出力

3行ごとにヘッダが表示されます

<table>
<tr><th>名前</th><th>住所</th></tr>
<tr class="odd"><td>神崎</td><td>真栄田町</td></tr></tr>
<tr class="even"><td>土居</td><td>北町</td></tr></tr>
<tr class="odd"><td>岸辺</td><td>西町</td></tr></tr>
<tr><th>名前</th><th>住所</th></tr>
<tr class="even"><td>岡田</td><td>中倉町</td></tr></tr>
<tr class="odd"><td>岡本</td><td>藤が丘町</td></tr></tr>
<tr class="even"><td>長井</td><td>北川町</td><tr></tr>
<tr><th>名前</th><th>住所</th></tr>
<tr class="odd"><td>松田</td><td>井手町</td></tr></tr>
<tr class="even">&t;td>前田</td><td>真栄田町</td></tr></tr>
</table>