Thymeleaf の使い方(書き方)がよくわからないという質問を多くいただきましたので、
よくある使い方をまとめました。
この記事は、【 MKupdate vol.4「SPIRAL ver.2.18 PHP」】を基に記載しています。
重複する部分がありますが、ご了承ください。
また、PHP + Thymeleaf 実践 については、こちらを参照ください。
よくある使い方をまとめました。
この記事は、【 MKupdate vol.4「SPIRAL ver.2.18 PHP」】を基に記載しています。
重複する部分がありますが、ご了承ください。
また、PHP + Thymeleaf 実践 については、こちらを参照ください。
Thymeleaf とは
Thymeleaf は、テンプレートエンジンです。
独自のタグはなく、th:○○という属性をHTML のタグに追加する形で使います。
HTML のタグに属性を追加する形なので、
複数コードの記載によるインデントが乱れがなくなり、ソースコードの可読性が高くなります。
独自のタグはなく、th:○○という属性をHTML のタグに追加する形で使います。
HTML のタグに属性を追加する形なので、
複数コードの記載によるインデントが乱れがなくなり、ソースコードの可読性が高くなります。
【基本】Thymeleaf の書き方
表示系カスタマイズする際に、よく使われる使い方をまとめました。
■ 標準構文th:xxx=""
基本的な使われ方は、上記の構文を HTML のタグに追加します。
書き方
■ 値の出力 <p th:text="${id}">id</p>
要素内の id は、${id} で出力された値と差し変わります。
■ 繰り返し処理
<div th:each="data:${array}"></div>
■ 分岐処理
<div th:if="${data} eq true"></div>
■ ローカル変数を定義
<div th:with="x=1,y=‘hoge’">
<p th:text="${x}"></p>
<p th:text="${y}"></p>
</div>
■ HTMLタグを出力しないThymeleaf の処理
<th:block th:if="${cp.result.value['date']}">
<!-- 条件が正しい場合、pタグのみ出力されます。 -->
<p>条件が正しい</p>
</th:block>
<th:block th:each="data:${array}">
<!-- 配列の要素数だけ、pタグが出力されます。 (配列の値は、${data} に格納され、出力されます)-->
<p th:text="${data}">データ</p>
</th:block>
■ 画面に出力したくない場合のコメントアウト
<!-- ソースに出力されるコメント--> <!--/* ソースに出力されないコメント */-->
■ 文字列を結合 その1
<!-- id:○○ が出力 -->
<p th:text="'id:' + ${id}"></p>
■ 文字列を結合 その2
<!-- id:○○ が出力 -->
<p th:text="|id:${id}|"></p>
<!-- 3が出力 --> <p th:text="1 + 2"></p>
演算子として、「+」「-」「*」「/」「%」が使用可能です。
【応用】Thymeleaf の書き方
■ 複雑な分岐<!-- 複数条件 true と 文字列一致 -->
<th:block th:if="${cp.result.value['error'] eq true || cp.result.value['text'] eq 'error'}">
<P>条件が正しい</p>
</th:block>
<!-- 複数条件 false と 文字列不一致 -->
<th:block th:if="${cp.result.value['error'] eq false && cp.result.value['text'] ne 'error'}">
<P>条件が正しい</p>
</th:block>
<!-- if と else -->
<p th:if="${cp.result.value['text'] eq 1}">text の値が 1 の場合に表示</p>
<p th:unless="${cp.result.value['text'] eq 1}">text の値が 1 でない場合に表示</p>
<!-- switch による分岐 -->
<div th:switch="${cp.result.value['num']}">
<p th:case="1" th:text="|${cp.result.value['num']}|"></p>
<p th:case="2" th:text="|${cp.result.value['num']}|"></p>
<p th:case="3" th:text="|${cp.result.value['num']}|"></p>
<p th:case="*">対象なし</p>
</div>
<!-- 出力に分岐を入れる場合 -->
<p th:text="${cp.result.value['data']}? ${cp.result.value['data']} : '値はありません。'}"></p>
<!-- 比較演算子 -->
<p th:if="${cp.result.value['a'] gt cp.result.value['b']}">aはbより大きい場合に表示</p>
Thymeleafの条件式に「<」「>」などは使用できません。
下記のように置き換えて使用してください。
* 「==」などの使用できる演算子もあるため、すべて使用できないわけではありません。
下記のように置き換えて使用してください。
* 「==」などの使用できる演算子もあるため、すべて使用できないわけではありません。
| == | eq |
| != | ne |
| > | gt |
| >= | ge |
| < | lt |
| <= | le |
| && | and |
| || | or |
■ 繰り返し処理の応用
<!-- 直接配列を指定 -->
<th:block th:each="val : ${ { 1,2,3,4,5,6,7,8,9,10 } }">
<p th:text="${val}"></p>
</th:block>
<!-- ローカル変数に配列を設定後 に 繰り返し処理 -->
<th:block th:with="array=${ {'一郎','次郎','三郎'} }">
<th:block th:each="val : ${array}">
<p th:text="${val}"></p>
</th:block>
</th:block>
<!-- 繰り返し処理の簡略化 -->
<th:block th:with="array=${ {'一郎','次郎','三郎'} }">
<p th:each="val : ${array}" th:text="${val}"></p>
</th:block>
<!-- 連想配列 と 繰り返し処理 -->
<th:block th:with="array=${ { {id:1, name:'一郎', age:'15'},{id:2, name:'次郎', age:10},{id:3, name:'三郎', age:5}} }">
<p th:each="val : ${array}" th:text="|${val[id]}:${val[name]}さん ${val[age]}歳|"></p>
</th:block>
<!-- ステータス変数1 -->
<th:block th:with="array=${ {'一郎','次郎','三郎'} }">
<th:block th:each="val,status : ${array}">
<p th:text="|${status.count}番目の要素|"></p>
</th:block>
</th:block>
<!-- ステータス変数2 -->
<th:block th:with="array=${ {'一郎','次郎','三郎'} }">
<th:block th:each="val,status : ${array}">
<!-- 繰り返し処理の回数の奇数の場合表示 -->
<p th:if=${status.odd} th:text="|${val}|"></p>
</th:block>
</th:block>
<!-- ステータス変数3 -->
<th:block th:with="array=${ {'一郎','次郎','三郎'} }">
<th:block th:each="val,status : ${array}">
<!-- 繰り返し処理の回数が、奇数の場合 odd。偶数の場合 even のクラスを追加 -->
<p th:text="|${val}|" th:classappend="${status.even} ? 'even':'odd'"></p>
</th:block>
</th:block>
「ステータス変数」は、繰り返し処理中のステータスを知るための変数となります。
繰り返し処理の中で定義され、下記の内容を保持しています。
繰り返し処理の中で定義され、下記の内容を保持しています。
| index | プロパティ | 0始まりの現在の「繰り返しインデックス」 |
| count | プロパティ | 1始まりの現在の「繰り返しインデックス」 |
| size | プロパティ | 被繰り返し変数の全要素数 |
| current | プロパティ | 繰り返し中の「繰り返し変数」 |
| even | 真偽値プロパティ | 現在の繰り返し処理が偶数か |
| odd | 真偽値プロパティ | 現在の繰り返し処理が奇数か |
| first | 真偽値プロパティ | 現在の繰り返し処理が最初かどうか |
| last | 真偽値プロパティ | 現在の繰り返し処理が最後かどうか |
ver.2 の Thymeleaf
記載している内容は、一部ですので、ぜひ公式リファレンスをご参照ください。
Thymeleaf 公式
ver.2 では、th: を付けた属性は値が処理されます。
下記のように HTML の属性値を自由に変更することで、動的に変更することも可能ですので、ぜひお試しください。
注意点としまして、Thymeleaf 独自属性で制限がされているものもございます。
独自属性は使用できるかを確認の上、実装をお願いします。
SPIRAL ver2で許可されている記法
Thymeleaf の使い方で追加のご要望がありましたら、
下記の「コンテンツに関しての要望はこちら」からご連絡ください。
Thymeleaf 公式
ver.2 では、th: を付けた属性は値が処理されます。
下記のように HTML の属性値を自由に変更することで、動的に変更することも可能ですので、ぜひお試しください。
<!--/* 参考 */-->
<p th:id="${id} ? |page-${id}|"></p>
独自属性は使用できるかを確認の上、実装をお願いします。
SPIRAL ver2で許可されている記法
Thymeleaf の使い方で追加のご要望がありましたら、
下記の「コンテンツに関しての要望はこちら」からご連絡ください。