5章 テンプレート - 6. テンプレートの展開
wr-for は、ページ中に一定の HTML パターンをくり返し展開する場合に使用します。<wr-for...>から</wr-for>の間に囲まれた部分が繰り返し展開されます。 wr-for タグの記述形式は下記の3種類あります。
<wr-for list="<list>" variable="<x>" count="<i>" index="<j>">
.........任意の HTML 記述........
</wr-for>
list="<list>"には配列を渡します。目次、繰り返しのある要素、wr-variable を使って宣言した変数、その他、リストであればなんでも渡すことができます。 variable= に指定された変数に list= に指定された列の i 番目の要素が代入されながら、配列の長さと同じ回数だけ <wr-for> の本体部分が繰り返し展開されます。
<wr-for string="<string>" variable="<x>" count="<i>" index="<j>">
.........任意の HTML 記述........
</wr-for>
string="<string>"には文字列型の要素を指定します。 variable= に指定された変数に文字列の i 番目の文字が代入されながら、文字列の長さと同じ回数だけ <wr-for> の本体部分が繰り返し展開されます。
<wr-for times="<n>" variable="<x>" count="<i>" index="<j>">
.........任意の HTML 記述........
</wr-for>
times="<n>" には、ループの回数を直接指定します。 list="<list>" と string="<string>" は、いずれも、与えられたリストや文字列の長さに応じてループを回る回数が決まりますが、times="<n>" の形式を使うと n に指定した値(数値でなければなりません)の回数だけループを回すことができます。例えば n に 3 を指定したならば、ループが3回実行されます。 ループの実行中は variable= に指定した変数には、何回目のループを回っているかを 0 オリジンで示す数値がバインドされます。
list= と string= と times= を同時にふたつ以上指定することはできません。
count="<i>" はオプショナルです。記述する場合は、<i>には任意の変数名を指定します。この変数には何回目のループを回っているかを 1 オリジンで示す数値がバインドされます。
index="<j>" はオプショナルです。記述する場合は、<j>には任意の変数名を指定します。この変数には何回目のループを回っているかを 0 オリジンで示す数値がバインドされます。
住所という繰り返しのあるグループ項目に郵便番号と住所という2つの下位項目がある場合、要素を参照するのにfor 文で表現するには、
<table>
<wr-for list="住所" variable="address">
<tr>
<td>%address.郵便番号%</td>
<td>%address.住所%</td>
</tr>
</wr-for>
</table>
となります。この場合、項目「住所」の繰り返しの回数だけ <tr>...</tr> が展開されます。
「記事一覧」という目次要素が、日時とタイトルという要素を持つ「記事」というテンプレートで作ったページを掲載する場合に、「記事」というテンプレートで作成された個々のページから、日時とタイトルを取り出して一覧表を作成する場合は、
<table>
<wr-for list="記事一覧" variable="news" count="i">
<tr>
<td>%i%</td>
<td>%news.日時%</td>
<td>%news.タイトル%</td>
</tr>
</wr-for>
</table>
となります。この場合、「記事」というテンプレートでできたページの数だけ<tr>...</tr> が展開されます。
下記の例では、text という要素に入力されている文字列を、wr-for を使って一文字ずつ展開していますが、20 文字ごとに <br/> タグを挿入しています。
<wr-for string="text" variable="x" count="i">
%x%<wr-if condition="divide(i, 20, 0, \"DOWN\") * 20 == i"><br/></wr-if>
</wr-for>
下記の展開では「星の数」という要素に入力されている値(数値でなければなりません)に応じた数の★が展開されます。
<wr-for times="星の数">★</wr-for>