5章 テンプレート - 6. テンプレートの展開
wr-return はメソッドから値を持ち帰る時に使用します。wr-return はメソッド内でのみ使用可能です。
<wr-return value="<戻り値>"/>
<wr-return value="<戻り値>"></wr-return>
<wr-return>..値..</wr-return>
wr-return の value="<戻り値>" の部分に、メソッドから持ち帰りたい値を指定します。例えば、メソッドの中で wr-variable を使って定義した変数に、条件に合致するページを選択して格納し、メソッドの戻り値とすることができます。
wr-return を使ってメソッドから値を持ち帰る場合、メソッドの戻り値は value="<戻り値>" に指定した値、または、上記(3)の記述を使った場合には、wr-return タグのボディーに指定した値となります。
index という目次形式の要素が定義されているとします。この目次にリストアップされているすべてのページの中から、その category という要素の値が "news" であるページを選別して返すメソッド newsList() を定義してみましょう。
<wr-variable name="result" />
<wr-for list="index" variable="aPage">
<wr-if condition="aPage.category == \"news\"">
<wr-append name="result" value="aPage" />
</wr-if>
</wr-for>
<wr-return value="result" />
この newsList() メソッドを呼び出す側の展開は、例えば、下記のようになるでしょう。
<html>
....
<ul>
<wr-for list="newsList()" variable="x">
<li>%pageTitle(x)%</li>
</wr-for>
</ul>
....
</html>
上の例を少し変形して newsList2() を定義してみましょう。wr-return は展開中のどこにでも書くことができます。ニュースの件数が3件を超えたら、その時点でメソッドの実行を終了して3件の値を持ち帰るようにしてみます。
下記のコードでは result に値を追加するごとに result の長さを count() 関数で数え、3に達していたら、その時点の result を持ち帰ります。
3件を超えることがなければ、newsList() の場合と同じように、最後に result を持ち帰ります。
<wr-variable name="result" />
<wr-for list="index" variable="aPage">
<wr-if condition="aPage.category == \"news\"">
<wr-append name="result" value="aPage" />
<wr-if condition="count(result) >= 3">
<wr-return value="result" />
</wr-if>
</wr-if>
</wr-for>
<wr-return value="result" />
この newsList2() の呼び出し側のコードは、例えば、下記のようになるでしょう。
<html>
....
<wr-variable name="list" value="newsList2()" />
<wr-if condition="count(list) > 0">
<ul>
<wr-for list="list" variable="x">
<li>%pageTitle(x)%</li>
</wr-for>
</ul>
</wr-if>
....
</html>
この例では、まず newsList2() の結果を変数 list に保存します。list の長さが 1 以上の場合に限り、リストを描くようにしてあります。