Thymeleaf(タイムリーフ)は属性名th:~で指定された値を処理し様々なHTMLを生成することができます。
本記事ではソース設定を行う際、Thymeleafでログイン時のステータスによるコンテンツのだし分けについて解説いたします。
本記事ではソース設定を行う際、Thymeleafでログイン時のステータスによるコンテンツのだし分けについて解説いたします。
Thymeleafの記法や動作についてはSPIRAL ver.2 サポートサイト Thymeleaf記法をご参照ください。
また、Thymeleaf関連記事をまとめた Thymeleaf特集 も是非ご覧ください。
関連記事はこちら
また、Thymeleaf関連記事をまとめた Thymeleaf特集 も是非ご覧ください。
- 【Thymeleafを使いこなそう】第1回 基本コード解説
- 【Thymeleafを使いこなそう】第2回 ログイン時ステータスでの分岐処理解説
- 【Thymeleafを使いこなそう】第3回 PHP スパイラルの独自関数の解説
- 【Thymeleafを使いこなそう】第4回 PHP APIを用いた実装解説
注意点
siteClient[xx]では、認証レコード値を挿入することが可能です。
xx部分には、認証DBの表示したいフィールドIDを入力ください。
参照フィールドを引用して使うには、参照先DBがレコード公開範囲設定済である必要があります。
認証レコード値の参照先DBレコード値を使用する場合には、siteClient[xx][yy]となります。
xx部分は、認証DBの参照フィールドのレコードID、yy部分には、参照先レコードの表示したいフィールドIDを入力ください。
また、以下のフィールドは使用できませんのでご注意ください。
xx部分には、認証DBの表示したいフィールドIDを入力ください。
参照フィールドを引用して使うには、参照先DBがレコード公開範囲設定済である必要があります。
認証レコード値の参照先DBレコード値を使用する場合には、siteClient[xx][yy]となります。
xx部分は、認証DBの参照フィールドのレコードID、yy部分には、参照先レコードの表示したいフィールドIDを入力ください。
また、以下のフィールドは使用できませんのでご注意ください。
| 日時 |
| ユーザフィールド |
| 参照フィールドのファイル |
| 参照フィールドのパスワード |
| 参照フィールドの参照フィールド |
| 複数レコード参照の参照フィールドのテキストエリア |
| 複数レコード参照の参照フィールドのマルチセレクト |
条件式
Thymeleafで条件式を記載する場合には、「>」「<」などは使用できません。
そのため、下記に置き換えて使用する必要があります。
そのため、下記に置き換えて使用する必要があります。
| == | eq |
| != | ne |
| > | gt |
| >= | ge |
| < | lt |
| <= | le |
| && | and |
| || | or |
テキストフィールド
テキストフィールドの比較の際には、認証レコード値を文字列に変換してから比較する必要があります。
文字列変換には「#strings.toString()」にて可能です。
以下の例では、テキストフィールドの認証値が「value」の場合に
「テキストフィールドの値はvalueです」と表示するものとなります。
文字列変換には「#strings.toString()」にて可能です。
以下の例では、テキストフィールドの認証値が「value」の場合に
「テキストフィールドの値はvalueです」と表示するものとなります。
テキストフィールドの比較「eq」
<!-- Thymeleafのコード -->
<!-- 認証値がテキストフィールドの場合 -->
<span th:if="${#strings.toString(siteClient.record[xx]) eq 'value'}">テキストフィールドの値はvalueです</span>
<!-- Thymeleafのコード -->
<!-- 認証値が参照フィールド、参照先フィールドがテキストフィールドの場合 -->
<span th:if="${siteClient.record[xx] != null and #strings.toString(siteClient.record[xx][yy]) eq 'value'}">テキストフィールドの値はvalueです</span>
セレクト
セレクトフィールドの比較の際には、セレクト項目のラベルIDもしくはラベル値を用いて比較可能です。
以下の例では、セレクトフィールドの認証値が「1,ラベル1」での場合に
「セレクトフィールドの値は「1,ラベル1」です」と表示するものとなります。
以下の例では、セレクトフィールドの認証値が「1,ラベル1」での場合に
「セレクトフィールドの値は「1,ラベル1」です」と表示するものとなります。
セレクトフィールドの比較「eq」
▼ラベルIDでの比較
<!-- Thymeleafのコード -->
<!-- 認証値がセレクトの場合 -->
<span th:if="${siteClient.record[xx]?.id eq 1}">セレクトフィールドの値は「1,ラベル1」です</span>
<!-- Thymeleafのコード -->
<!-- 認証値が参照フィールド、参照先フィールドがセレクトフィールドの場合 -->
<span th:if="${siteClient.record[xx] != null and siteClient.record[xx][yy]?.id eq 1}">セレクトフィールドの値は「1,ラベル1」です</span>
▼ラベル値での比較
<!-- Thymeleafのコード -->
<!-- 認証値がセレクトフィールドの場合 -->
<span th:if="${siteClient.record[xx]?.label eq 'ラベル1'}">セレクトフィールドの値は「1,ラベル1」です</span>
<!-- Thymeleafのコード -->
<!-- 認証値が参照フィールド、参照先フィールドがセレクトフィールドの場合 -->
<span th:if="${siteClient.record[xx] != null and siteClient.record[xx][yy]?.label eq 'ラベル1'}">セレクトフィールドの値は「1,ラベル1」です</span>
マルチセレクト
マルチセレクトフィールドの比較の際には、認証レコード値がListのため、
形式に変換してから#lists.containsにて判断します。
以下の例では、マルチセレクトフィールドの認証値が「1,ラベル1」を含むの場合に
「マルチセレクトフィールドの値は「1,ラベル1」が含まれます」を表示するものとなります。
※マルチセレクトフィールドに値が存在しない場合には、形式変換の際にエラーとなるため
「th:if」にて値の存在有無をチェックする必要があります。
また、イコールにしたい場合には、下記となります。
形式に変換してから#lists.containsにて判断します。
以下の例では、マルチセレクトフィールドの認証値が「1,ラベル1」を含むの場合に
「マルチセレクトフィールドの値は「1,ラベル1」が含まれます」を表示するものとなります。
※マルチセレクトフィールドに値が存在しない場合には、形式変換の際にエラーとなるため
「th:if」にて値の存在有無をチェックする必要があります。
マルチセレクトフィールドの比較「含まれる」
▼ラベルIDでの比較
<!-- Thymeleafのコード -->
<!-- 認証値がマルチセレクトフィールドの場合 -->
<th:block th:if="${siteClient.record[xx] != null}" th:with="ids=${siteClient.record[xx].![id]}">
<span th:if="${#lists.contains(ids, 1)}">
マルチセレクトフィールドの値は「1,ラベル1」が含まれます
</span>
</th:block>
<!-- Thymeleafのコード -->
<!-- 認証値が参照フィールド、参照先フィールドがマルチセレクトフィールドの場合 -->
<th:block th:if="${siteClient.record[xx] != null and siteClient.record[xx][yy] != null}" th:with="ids=${siteClient.record[xx][yy].![id]}">
<span th:if="${#lists.contains(ids, 1)}">
マルチセレクトフィールドの値は「1,ラベル1」が含まれます
</span>
</th:block>
▼ラベル値での比較
<!-- Thymeleafのコード -->
<!-- 認証値がマルチセレクトフィールドの場合 -->
<th:block th:if="${siteClient.record[xx] != null}" th:with="labels=${siteClient.record[xx].![label]}">
<span th:if="${#lists.contains(labels, 'ラベル1')}">
マルチセレクトフィールドの値は「1,ラベル1」が含まれます
</span>
</th:block>
<!-- Thymeleafのコード -->
<!-- 認証値が参照フィールド、参照先フィールドがマルチセレクトフィールドの場合 -->
<th:block th:if="${siteClient.record[xx] != null and siteClient.record[xx][yy] != null}" th:with="labels=${siteClient.record[xx][yy].![label]}">
<span th:if="${#lists.contains(labels, 'ラベル1')}">
マルチセレクトフィールドの値は「1,ラベル1」が含まれます
</span>
</th:block>
マルチセレクトフィールドの比較「eq」
▼イコールにしたい場合:ラベルIDでの比較
<!-- Thymeleafのコード -->
<!-- 認証値がマルチセレクトフィールドの場合 -->
<th:block th:if="${siteClient.record[xx] != null}" th:with="ids=${siteClient.record[xx].![id]}">
<span th:if="${ids == {1,2}}">
「1,ラベル1」「2,ラベル2」のみ
</span>
</th:block>
<!-- Thymeleafのコード -->
<!-- 認証値が参照フィールド、参照先フィールドがマルチセレクトフィールドの場合 -->
<th:block th:if="${siteClient.record[xx] != null and siteClient.record[xx][yy] != null}" th:with="ids=${siteClient.record[xx][yy].![id]}">
<span th:if="${ids == {1,2}}">
「1,ラベル1」「2,ラベル2」のみ
</span>
</th:block>
▼イコールにしたい場合:ラベル値での比較
<!-- Thymeleafのコード -->
<!-- 認証値がマルチセレクトフィールドの場合 -->
<th:block th:if="${siteClient.record[xx] != null}" th:with="labels=${siteClient.record[xx].![label]}">
<span th:if="${labels == {'ラベル1','ラベル2'}}">
「1,ラベル1」「2,ラベル2」のみ
</span>
</th:block>
<!-- Thymeleafのコード -->
<!-- 認証値が参照フィールド、参照先フィールドがマルチセレクトフィールドの場合 -->
<th:block th:if="${siteClient.record[xx] != null and siteClient.record[xx][yy] != null}" th:with="labels=${siteClient.record[xx][yy].![label]}">
<span th:if="${labels == {'ラベル1','ラベル2'}}">
「1,ラベル1」「2,ラベル2」のみ
</span>
</th:block>
日付・時刻
日付・時刻の比較の際には、現時点の時刻と比較することが多いです。
例では、現時点の日付と比較するため、PHPにて現在日時を取得し、Thymeleafに引き渡す処理を行います。
お試しいただく際には、ページのPHPに下記をご記載ください。
Thymeleafで値を受け取り、表示する方法は下記となります。
現在の時刻を認証値の時刻と比較する際には、下記となります。
また、日付と時刻を併せて比較ことで、認証値の日付・時刻以降に表示を切り替えるなども可能となります。
関連記事はこちら
例では、現時点の日付と比較するため、PHPにて現在日時を取得し、Thymeleafに引き渡す処理を行います。
お試しいただく際には、ページのPHPに下記をご記載ください。
▼PHPのコード
ページPHPで記載した内容をThymeleafで使用するには、PHPの値を受け取る必要があります。<?php
$SPIRAL->setTHValue("today",date("Y-m-d"));
$SPIRAL->setTHValue("nowTime",date("H:m:s"));
Thymeleafで値を受け取り、表示する方法は下記となります。
▼Thymeleafのコード
現在の日付を認証値の日付と比較する際には、下記となります。
<!-- Thymeleafのコード -->
<span th:text="${cp.result.value['today']}"></span>
<span th:text="${cp.result.value['nowTime']}"></span>
日付フィールドの比較「gt,eq,lt」
<!-- Thymeleafのコード -->
<!-- 認証値が日付フィールドの場合 -->
<span th:if="${siteClient.record[xx] != null and cp.result.value['today'] gt siteClient.record[xx]?.format('yyyy-MM-dd')}">現在日は認証値の日付より前の日です。</span>
<span th:if="${siteClient.record[xx] != null and cp.result.value['today'] eq siteClient.record[xx]?.format('yyyy-MM-dd')}">現在日は認証値の日付と同じです。</span>
<span th:if="${siteClient.record[xx] != null and cp.result.value['today'] lt siteClient.record[xx]?.format('yyyy-MM-dd')}">現在日は認証値の日付より後の日です。</span>
<!-- Thymeleafのコード -->
<!-- 認証値が参照フィールド、参照先フィールドが認証値が日付フィールドの場合 -->
<span th:if="${siteClient.record[xx] != null and siteClient.record[xx][yy] != null and cp.result.value['today'] gt siteClient.record[xx][yy]?.format('yyyy-MM-dd')}">現在日は認証値の日付より前の日です。</span>
<span th:if="${siteClient.record[xx] != null and siteClient.record[xx][yy] != null and cp.result.value['today'] eq siteClient.record[xx][yy]?.format('yyyy-MM-dd')}">現在日は認証値の日付と同じです。</span>
<span th:if="${siteClient.record[xx] != null and siteClient.record[xx][yy] != null and cp.result.value['today'] lt siteClient.record[xx][yy]?.format('yyyy-MM-dd')}">現在日は認証値の日付より後の日です。</span>
時刻フィールドの比較「gt,eq,lt」
<!-- Thymeleafのコード -->
<!-- 認証値が時刻フィールドの場合 -->
<span th:if="${siteClient.record[xx] != null and cp.result.value['nowTime'] gt siteClient.record[xx]?.format('HH:mm:ss')}">現在時刻は認証値の時刻とより小さいです。</span>
<span th:if="${siteClient.record[xx] != null and cp.result.value['nowTime'] eq siteClient.record[xx]?.format('HH:mm:ss')}">現在時刻は認証値の時刻と同じです。</span>
<span th:if="${siteClient.record[xx] != null and cp.result.value['nowTime'] lt siteClient.record[xx]?.format('HH:mm:ss')}">現在時刻は認証値の時刻とより大きいです。</span>
<!-- Thymeleafのコード -->
<!-- 認証値が参照フィールド、参照先フィールドが認証値が時刻フィールドの場合 -->
<span th:if="${siteClient.record[xx] != null and siteClient.record[xx][yy] != null and cp.result.value['nowTime'] gt siteClient.record[xx][yy]?.format('HH:mm:ss')}">現在時刻は認証値の時刻とより小さいです。</span>
<span th:if="${siteClient.record[xx] != null and siteClient.record[xx][yy] != null and cp.result.value['nowTime'] eq siteClient.record[xx][yy]?.format('HH:mm:ss')}">現在時刻は認証値の時刻と同じです。</span>
<span th:if="${siteClient.record[xx] != null and siteClient.record[xx][yy] != null and cp.result.value['nowTime'] lt siteClient.record[xx][yy]?.format('HH:mm:ss')}">現在時刻は認証値の時刻とより大きいです。</span>
日時・時刻フィールドの比較「現在日が設定値と一致 かつ 現在時刻が設定値より後 の場合に表示」
<!-- Thymeleafのコード -->
<!-- 認証値が日付・時刻フィールドの場合 -->
<span th:if="${siteClient.record[xx] != null and siteClient.record[XX] != null and cp.result.value['today'] eq siteClient.record[xx].format('yyyy-MM-dd') and cp.result.value['nowTime'] le siteClient.record[XX].format('HH:mm:ss')}">
現在日が設定値と一致 かつ 現在時刻が設定値より後 の場合に表示
</span>
<!-- Thymeleafのコード -->
<!-- 認証値が参照フィールド、参照先フィールドが認証値が日時・時刻フィールドの場合 -->
<span th:if="${siteClient.record[xx] != null and siteClient.record[xx][yy] != null and siteClient.record[xx][YY] != null and cp.result.value['today'] eq siteClient.record[xx][yy].format('yyyy-MM-dd') and cp.result.value['nowTime'] le siteClient.record[xx][YY].format('HH:mm:ss')}">
現在日が設定値と一致 かつ 現在時刻が設定値より後 の場合に表示
</span>
日時・時刻フィールドの比較「特定の日時より後の場合に表示」
<!-- Thymeleafのコード -->
<!-- 認証値が日付・時刻フィールドの場合 -->
<span th:if="${siteClient.record[xx] != null and siteClient.record[XX] != null and cp.result.value['today'] lt siteClient.record[xx].format('yyyy-MM-dd') or (cp.result.value['today'] eq siteClient.record[xx].format('yyyy-MM-dd') and cp.result.value['nowTime'] le siteClient.record[XX].format('HH:mm:ss'))}">
特定の日時より後の場合に表示
</span>
<!-- Thymeleafのコード -->
<!-- 認証値が参照フィールド、参照先フィールドが認証値が日時・時刻フィールドの場合 -->
<span th:if="${siteClient.record[xx] != null and siteClient.record[xx][yy] != null and siteClient.record[xx][YY] != null and (cp.result.value['today'] lt siteClient.record[xx][yy].format('yyyy-MM-dd') or (cp.result.value['today'] eq siteClient.record[xx][yy].format('yyyy-MM-dd') and cp.result.value['nowTime'] le siteClient.record[xx][YY].format('HH:mm:ss')))}">
特定の日時より後の場合に表示
</span>
- 【Thymeleafを使いこなそう】第1回 基本コード解説
- 【Thymeleafを使いこなそう】第2回 ログイン時ステータスでの分岐処理解説
- 【Thymeleafを使いこなそう】第3回 PHP スパイラルの独自関数の解説
- 【Thymeleafを使いこなそう】第4回 PHP APIを用いた実装解説