5章 テンプレート - 5. テンプレートの展開
条件に応じて多分岐したい場合には wr-conditional タグを使うと便利です。
wr-conditional タグの内側には複数の wr-cond タグを記述することができます。それぞれの wr-cond タグには conditional= で条件を指定します。wr-cond タグは記述されている順にその conditional= に指定されている条件がチェックされ、最初に条件が成立した wr-cond タグのボディーが展開されます。
wr-conditional タグ中の、最初に条件が成立した wr-cond のボディーのみが展開されます。wr-conditional 中ふたつ以上の wr-cond のボディーが展開されることはありません。
<wr-conditional>
<wr-cond condition="cond1">
.........cond1 が true の場合の展開の記述........
</wr-cond>
<wr-cond condition="cond2">
.........cond2 が true の場合の展開の記述........
</wr-cond>
<wr-cond condition="cond3">
.........cond3 が true の場合の展開の記述........
</wr-cond>
<wr-cond condition="cond4">
.........cond4 が true の場合の展開の記述........
</wr-cond>
</wr-conditional>
<wr-cond condition="expr"> の expr に書く条件式には、式の開始と終了を表す % 記号はいりません。expr の部分は、あらかじめ % に挟まれているかのように式として評価されます。
expr の部分には値が論理値(true または false)になる任意の式を書くことができます。
expr の部分に文字列を記述する必要がある場合は、文字列を "" (double quote) で囲みます。その際には、" をエスケープするために、" の前に \(バックスラッシュ)を記述してください。例えば下記のようにして文字列を表記してください。
<wr-conditional>...</wr-conditional> の内側には <wr-cond>...</wr-cond> の繰り返しのみが記述できます。ただし、例外的に wr-comment は記述することができます。
<wr-conditional>
<wr-cond condition = " pageTitle() == \"今日の天気\" ">
.........任意の記述........
</wr-cond>
<wr-cond condition = "......">
....
</wr-cond>
</wr-conditional>
releaseDate という日付型の要素を持つページを想定してみます。
(1)releaseDate という日付型の要素に値が入力されていれば、その日付を展開します。
(2)releaseDate に値が指定されていなければ scheduleStartDate() 関数を使って公開開始指定時刻を取得します。もし公開開始指定時刻が指定されていればその日付を展開します。
(3)いずれも指定されていない場合には lastModifieDate() 関数を使ってそのページの最終更新時刻を取得し、それを展開します。
<wr-conditional>
<wr-cond condition="isNotNull(releaseDate)">
%formatDate(releaseDate, "yyyy/MM/dd (E)")%
</wr-cond>
<wr-cond condition="isNotNull(scheduledStartDate())">
%formatDate(scheduledStartDate(), "yyyy/MM/dd (E)")%
</wr-cond>
<wr-cond condition="true">
%formatDate(lastModifiedDate(), "yyyy/MM/dd (E)")%
</wr-cond>
</wr-conditional>
3番目の <wr-cond condition="true">...</wr-cond> という記述は、wr-conditional の内側に記述する一番最後の wr-cond のイディオムと言えるような記述です。この記述により、その前のいずれの wr-cond も満たさないすべての状況に対する展開を指定しておくことができます。
n の値が 10 以下ならば「小」100 以下ならば「中」それ以外ならば「大」と表示してみます。
<wr-conditional>
<wr-cond condition="n <= 10">小</wr-cond>
<wr-cond condition="n <= 100">中</wr-cond>
<wr-cond condition="true">大</wr-cond>
</wr-conditional>