リファレンス

SimpleTemplateではいくつかの機能・構文が用意されています。
以下にご説明いたしますので、お読みいただきSimpleTemplateをご活用ください。

コメント

まずテンプレートファイル内でのコメントの記述方法をご説明いたします。
テンプレートエンジンを使用したWEBシステム開発ではデザインファイルとしてHTMLの構文に沿った記述をテンプレートとして使用します。通常の静的なWEBページでそうであるように、HTML構文に沿ったデザインファイルも文書構造の記述後の理解を助けるためにコメントを残す必要があります。これはテンプレートファイルの保守のために有用です。
構文としては、テンプレートファイルにて以下のようにコメントとして残したい文字列を「{*」と「*}」で囲みます。

【記述例】
{* この部分はコメントとなり、テンプレートの出力にはあらわれません。 *}

テンプレートファイルのコメントで注意すべきことは、テンプレートファイルの出力時には空文字に変換され、全く出力には現れないことです。
これは、HTMLファイルのコメントと異なります。

テンプレート変数の展開

SimpleTemplateの中核的機能であるテンプレートファイル内での変数の展開についてご説明いたします。
クイックスタートでもご説明した通り、SimpleTemplateを使用してテンプレートファイル内で変数を展開するにはいくつかのステップが必要です。
本節ではテンプレート変数のテンプレートファイル内での構文を中心にご説明いたしますので、使用ステップが分からない場合は今一度「クイックスタート」をご覧ください。

まず、PHPファイルにて変数のテンプレート変数への割り当て(アサイン)を行います。
通常は変数に値を設定し、その変数をテンプレート変数へアサインします。

【記述例】PHPファイル内
// 変数の設定
$someVariable = 'テンプレート変数の値';
// テンプレート変数の割り当て(アサイン)
$template->assign('someValue', $someVariable);

※$templateはSimpleTemplateクラスのインスタンスです

次に、表示するテンプレートファイルにて、展開するテンプレート変数を記述します。
上記のPHPファイルの記述例に従うと、テンプレート変数はアサインしたテンプレート変数識別子(例では”someValue”)の頭に$(ドルマーク)を付加して、波カッコで囲みます。
記述例としては以下のようになります。

【記述例】テンプレートファイル内
{$someValue}
【出力】
テンプレート変数の値

テンプレート変数の割り当て(アサイン)で注意すべきことは、アサインするデータ型に制限があることです。
オブジェクト型・リソース型の値をテンプレート変数にはアサインできません。これらをアサインした場合はテンプレートファイル内のテンプレート変数は空文字に変換されます。
テンプレート変数にアサインすることが出来るデータ型は、①論理値、②数値(整数・浮動小数点数)、③文字列、④配列となります。
ただし、④配列をアサインした場合は、後述の「foreach」・「section」構文内にてテンプレート変数を使用しないと空文字に変換されます。

また、テンプレート変数識別子は文字列(string)のみ使用することが出来ます。その他のデータ型、例えば数値を使用した場合には、assignメソッドはfalseを返し、テンプレート変数の割り当ては行われません。(※assignメソッドにてテンプレート変数の割り当てが成功した場合には、assignメソッドは戻り値としてtrueを返します。)

変数の割り当て(アサイン)がされていないテンプレート変数の処理

PHPファイルにて変数の割り当て(アサイン)がされていないテンプレート変数がテンプレートファイルに記述されている場合、原則としてテンプレート変数は空文字へ変換されます。
空文字へと変換されるテンプレート変数の表記を正規表現になおすと以下のようになります。

/{\$([\w.-_?&=]+)}/

しかし、デフォルト値を設定したテンプレート変数は変数を割り当てられていない場合だけ、設定したデフォルト値にテンプレート変数が変換されます。
デフォルト値の設定構文は以下のようになります。

【デフォルト値設定構文】
<文字列の場合>
{$someValue|default:['|"]defaultValue['|"]}
<数値の場合>
{$someValue|default:defaultValue}
【記述例】
{$someValue|default='デフォルト値'}

テンプレートファイルのインクルード

SimpleTemplateではテンプレートファイル内にて別のテンプレートファイルをインクルードすることが出来ます。
これはWEBページのヘッダーやフッターをテンプレートファイルとして、表示する各テンプレートファイルにてインクルードすると便利です。保守性が向上します。
構文は以下のようになります。

【テンプレートファイルのインクルード構文】
{include file=['|"]otherTemplate['|"]}
【記述例】
{include file='header.tpl'}

テンプレートファイル内で他のテンプレートファイルをインクルードすると、インクルード構文の記述がインクルードしたファイル文字列に置き換わります。
存在しないテンプレートファイルをインクルードしようとするとPHPの警告(Warning)が表示されますので、テンプレートファイル名等が間違っていないかを確認してください。
また、インクルードするテンプレートファイルはテンプレート格納ディレクトリに置く必要があります。※テンプレート格納ディレクトリにテンプレートファイルが存在しない場合も警告が表示されます。

インクルードしたテンプレートファイル内にて別のテンプレートファイルを再度インクルードすることも可能です。テンプレートファイルのインクルード処理はテンプレートファイル内にインクルード構文が存在しなくなるまで再帰的に処理されます。これにより、テンプレートファイルをWEBページの各ブロックに割り当ててモジュール化することが出来ます。

テンプレートファイル内での変数の設定(assign)

SimpleTemplateではテンプレートファイル内でテンプレート変数を設定することが出来ます。これはPHPファイル側のロジックで管理するのではなく、テンプレートファイル内で管理するのが適当な値、つまり各WEBページ固有の値をテンプレートへ割り当てるのに有用です。
assign構文は以下のようになります。

【assign構文】
{assign var=['|"]templateVariable['|"] value=templateValue}
【記述例】
{assign var='page_title' value='SimpleTemplateテストページ'}

以下がテンプレートファイル内でHTMLページのページタイトルを設定する例です。例に示すように、各テンプレートにて共通のHTMLヘッダを記述したテンプレートをインクルードし、そのヘッダテンプレートにてページタイトルをテンプレート変数で記述しておきディスプレイするテンプレートにてページタイトルに使用しているテンプレート変数を設定すると便利です。

【header.tpl】
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8" />
<title>{$page_title}</title>
</head>
<body>
【表示テンプレート】
{* ヘッダーテンプレートのインクルード *}
{include file='header.tpl'}

{* ページのタイトルの設定 *}
{assign var='page_title' value='ページタイトル'}

~template contents~

{* フッターテンプレートのインクルード *}
{include file='footer.tpl'}
【footer.tpl】
</body>
</html>

assign構文を使用するに当たって注意すべきことは、valueの値として複数行の文字列を設定出来ないことです。
複数行の文字列をテンプレート内でテンプレート変数に設定するには、次に説明するcapture構文を使用します。

テンプレートファイル内での変数の設定(capture)

SimpleTemplateにおいて、テンプレートファイル内にてテンプレート変数を設定するもうひとつの方法がcapture構文です。 この構文はassign構文と異なり複数行の文字列(値)をテンプレート変数に設定することが出来ます。
capture構文は以下のようになります。

【capture構文】
{capture name=['|"]templateVariable['|"]}
~テンプレート変数(複数行)~
{/capture}
【記述例】
{capture name='templateVariable'}
<script>
function alertMsg(){
  alert('テンプレート側でスクリプトが実装されました');
}
</script>
{/capture}

capture構文は表示するHTMLページ固有のJavaScriptをテンプレートファイル内で設定する場合に便利です。
共通してインクルードするテンプレート(例:ヘッダーテンプレートファイル)にテンプレート変数を記述しておき、ディスプレイするテンプレート内でそのテンプレート変数を設定する使用例です。

【header.tpl】
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8" />
<title>SimpleTemplate「capture構文」</title>
{$header_insert}
</head>
<body>
【表示テンプレート】
{* ヘッダー挿入部分設定 *}
{capture name='header_insert'}
<script type="text/javascript">
function alertMsg(){
  alert('テンプレート側でスクリプトが実装されました');
}
</script>
{/capture}

{* ヘッダーテンプレートのインクルード *}
{include file='header.tpl'}

~template contents~

{* フッターテンプレートのインクルード *}
{include file='footer.tpl'}
【footer.tpl】
</body>
</html>

1次元配列のループ処理(foreach構文)

SimpleTemplateにはテンプレートファイル内で1次元配列のループ処理をする構文(foreach構文)が用意されています。数値配列・連想配列ともに使用が可能です。
まず、以下に使用例を記します。

【PHPファイル】
// SimpleTemplateクラスのインクルード
require_once 'SimpleTemplate.class.php';

// SimpleTemplateインスタンスの生成
$template = new SimpleTemplate();

// テンプレート格納ディレクトリの設定
$template->template_dir('./templates');
// テンプレートファイル記述エンコーディングの指定
$template->setTplEncoding('UTF-8');
// 出力エンコーディングの指定
$template->setOutputEncoding('UTF-8');

$testAry = array('test01' => 'テストメッセージ01', 'test02' => 'テストメッセージ02', 'test03' => 'テストメッセージ03');

// テンプレート変数の割り当て
$template->assign('message', $testAry);

// テンプレートファイルの表示(ディスプレイ)
$template->display('sometemplate.tpl');
【テンプレートファイル】sometemplate.tpl
<ul>
	{foreach from=$message key=k value=v}
		<li>{$k}:{$v}</li>
	{/foreach}
</ul>
【出力】
・test01:テストメッセージ01
・test02:テストメッセージ02
・test03:テストメッセージ03

上記例はインデックスキーの指定がある場合の例です。(※"key=k"と"{$k}"の部分です)
foreach構文では①インデックスキーの指定がある場合と、②インデックスキーの指定がない場合の2つの構文が用意されています。

まず、①インデックスキーの指定がある場合ですが、構文は以下のようになります。

【構文】
{foreach from=$templateArray key=k value=v}
	*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
	           {$k}と{$v}を含むループ処理(繰り返し)文字列
	*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
{/foreach}
【記述例】
{foreach from=$message key=k value=v}
	<li>{$k}:{$v}</li>
{/foreach}

foreach宣言の中で、from属性にロジックファイルで配列変数を割り当てたテンプレート変数を設定します。
次に、key属性でループ処理(繰り返し)する文字列の中でキー(添え字[数値][文字列])として使用する文字列を定義します。
そして、value属性でループ処理(繰り返し)する文字列の中でキー(添え字[数値][文字列])に対応する値として使用する文字列を定義します。
ループ処理(繰り返し)をする文字列の中では、上記属性に定義した文字列に"{$"と"}"を前後に付けて使用し

次に、②インデックスキーの指定がない場合の構文は以下のようになります。

【構文】
{foreach from=$templateArray value=v}
	*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
	             {$v}を含むループ処理(繰り返し)文字列
	*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
{/foreach}
【記述例】
{foreach from=$message value=v}
	<li>{$v}</li>
{/foreach}

インデックスキーの指定がないforeach構文は数値配列のループ処理に使用すると便利です。

そして、①インデックスキーの指定がある場合、及び②インデックスキーの指定がない場合共に、ループインデックスを参照することが出来ます。
ループインデックスを参照するには、テンプレートファイル内で「from属性値.index」を「{}」で囲った文字列を指定します。
ループインデックスは、0から始まり1ずつ増加します。※0オリジン
構文は以下のようになります。

【構文】
{foreach from=$templateArray key=k value=v}
	*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
	           {$k}と{$v}を含むループ処理(繰り返し)文字列
	*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
{/foreach}
【記述例】
{foreach from=$message key=k value=v}
	<li>{message.index}:{$k}:{$v}</li>
{/foreach}

上記の記述例で言うと、テンプレートファイル内{message.index}で、ループ配列の要素インデックスを参照することが出来ます。

2次配列のループ処理(section構文)

SimpleTemplateにはテンプレートファイル内で2次元配列のループ処理をする構文(section構文)が用意されています。
まず、以下に使用例を記します。

【PHPファイル】
// SimpleTemplateクラスのインクルード
require_once 'SimpleTemplate.class.php';

// SimpleTemplateインスタンスの生成
$template = new SimpleTemplate();

// テンプレート格納ディレクトリの設定
$template->template_dir('./templates');
// テンプレートファイル記述エンコーディングの指定
$template->setTplEncoding('UTF-8');
// 出力エンコーディングの指定
$template->setOutputEncoding('UTF-8');

$testAry = array(
			 	array('foo' => 'foo01',
					  'some' => 'some01',
					  'any' => 'any01'),
				array('foo' => 'foo02',
					  'some' => 'some02',
					  'any' => 'any02'),
				array('foo' => 'foo03',
					  'some' => 'some03',
					  'any' => 'any03'),
				array('foo' => 'foo04',
					  'some' => 'some04',
					  'any' => 'any04'),
				array('foo' => 'foo05',
					  'some' => 'some05',
					  'any' => 'any05')
			 );

// テンプレート変数の割り当て
$template->assign('message', $testAry);

// テンプレートファイルの表示(ディスプレイ)
$template->display('sometemplate.tpl');
【テンプレートファイル】sometemplate.tpl
<table border="1">
	{section loop=$message start=0 max=5}
	<tr>
		<td>{$message.foo}</td><td>{$message.some}</td><td>{$message.any}</td>
	</tr>
	{/section}

【出力】
foo01some01any01
foo02some02any02
foo03some03any03
foo04some04any04
foo05some05any05

上記例はstart属性とmax属性の指定がある場合の例です。
section構文では①start属性・max属性の指定がある場合と、②start属性の指定がある場合、③max属性の指定がある場合、④start属性・max属性の指定が共にない場合の4つの構文が用意されています。

まず、①start属性・max属性の指定がある場合ですが、構文は以下のようになります。

【構文】
{section loop=$templateArray start=[数値] max=[数値]}
	*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
	               {$templateArray.[数値キー|連想キー]}を含むループ処理(繰り返し)文字列
	*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
{/section}
【記述例】
{section loop=$message start=1 max=5}
<tr>
	<td>{$message.foo}</td><td>{$message.some}</td><td>{$message.any}</td>
</tr>
{/section}

section宣言の中で、loop属性にロジックファイルで配列変数を割り当てたテンプレート変数を設定します。
次に、start属性でループ処理(繰り返し)するテンプレート変数の開始インデックスを指定します。start属性の指定は数値で行います。また、ループ処理(繰り返し)をする配列の1次元目の添え字をstart属性で指定しています。ですので、「0」を指定した場合、ループ処理(繰り返し)をする配列の先頭要素からループ処理(繰り返し)が始まります。
そして、max属性でループ処理(繰り返し)する回数を数値で指定します。start属性で指定した値とmax属性で指定した値の合計がループ処理(繰り返し)をする配列の要素数を超えた場合は、配列の最後の要素までループ処理(繰り返し)が行われます。
ループ処理(繰り返し)をする文字列の中では、loop属性に指定したテンプレート変数に"."を後ろに加えて、その後にループ処理をする配列のインデックスを加えた文字列に、"{"と"}"を前後に付けて使用します。

section構文を使用する際に注意しなければならないのは、ループ処理をする2次元配列の1次元目は数値配列でなければならないことです。
現在、2次元配列の1次元目が連想配列である場合のループ処理に対応しておりません。

次に、②start属性の指定がある場合の構文は以下のようになります。

【構文】
{section loop=$templateArray start=[数値]}
	*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
	            {$templateArray.[数値キー|連想キー]}を含むループ処理(繰り返し)文字列
	*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
{/section}
【記述例】
{section loop=$message start=1}
<tr>
	<td>{$message.foo}</td><td>{$message.some}</td><td>{$message.any}</td>
</tr>
{/section}

section構文にてstart属性のみをした場合は、start属性で指定した要素から2次元配列の最後の要素までループ処理が実行されます。

次に、③max属性の指定がある場合の構文は以下のようになります。

【構文】
{section loop=$templateArray max=[数値]}
	*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
	             {$templateArray.[数値キー|連想キー]}を含むループ処理(繰り返し)文字列
	*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
{/section}
【記述例】
{section loop=$message max=10}
<tr>
	<td>{$message.foo}</td><td>{$message.some}</td><td>{$message.any}</td>
</tr>
{/section}

section構文にてmax属性のみをした場合は、2次元配列の先頭要素からmax属性に指定した回数だけループ処理が行われます。
例えばmax属性に「10」を指定した場合、2次元配列の要素[0]から[9](要素数10)までループ処理が行われます。

最後に、④start属性・max属性の指定が共にない場合の構文は以下のようになります。

【構文】
{section loop=$templateArray}
	*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
	            {$templateArray.[数値キー|連想キー]}を含むループ処理(繰り返し)文字列
	*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
{/section}
【記述例】
{section loop=$message}
<tr>
	<td>{$message.foo}</td><td>{$message.some}</td><td>{$message.any}</td>
</tr>
{/section}

section構文にてstart属性・max属性の指定が共にない場合は、2次元配列の先頭要素[0]から最後の要素までループ処理が行われます。

そして、①start属性・max属性の指定がある場合と、②start属性の指定がある場合、③max属性の指定がある場合、④start属性・max属性の指定が共にない場合すべてで、ループインデックス(1次元目)を参照することが出来ます。
ループインデックスを参照するには、テンプレートファイル内で「loop属性値.index」を「{}」で囲った文字列を指定します。
ループインデックスは、0から始まり1ずつ増加します。※0オリジン
構文は以下のようになります。

【構文】
{section loop=$templateArray start=[数値] max=[数値]}
	*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
	               {$templateArray.[数値キー|連想キー]}を含むループ処理(繰り返し)文字列
	*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
{/section}
【記述例】
{section loop=$message start=1 max=5}
<tr>
	<td>{message.index}</td><td>{$message.foo}</td><td>{$message.some}</td><td>{$message.any}</td>
</tr>
{/section}

section構文をSimpleTemplateに実装した理由ですが、WEBアプリケーションにおける一覧ページ作成の利便性を高めるためです。 例えば、データベースを使用したWEBアプリケーションでデータの一覧ページを作成する場合に、データベースから目的のデータを抽出して、データベースからの結果セットを配列に変換した上でsection構文を用いると簡単に一覧ページを作成出来ます。
データベースを使用せずにデータをファイルとして保存している場合でも、データを2次元配列に変換してテンプレート変数として割り当てると、同様に一覧ページを簡単に作成出来ます。

ifステートメント構文(条件分岐処理)

SimpleTemplateには、「ifステートメント構文(条件分岐処理)」が用意されています。
まず、使用例は下記のようになります。

【PHPファイル】
// SimpleTemplateクラスのインクルード
require_once('SimpleTemplate.class.php');

// SimpleTemplateインスタンスの生成
$template = new SimpleTemplate();

// テンプレート格納ディレクトリの設定
$template->template_dir('./templates');
// テンプレートファイル記述エンコーディングの指定
$template->setTplEncoding('UTF-8');
// 出力エンコーディングの指定
$template->setOutputEncoding('UTF-8');

$name = 'Fred';

// テンプレート変数の割り当て
$template->assign('name', $name);

// テンプレートファイルの表示(ディスプレイ)
$template->display('sometemplate.tpl');
【テンプレートファイル】sometemplate.tpl
{if $name == 'Fred'}
	名前はフレッドです。
{elseif}
	名前はフレッドではありません。
{/if}
【出力】
名前はフレッドです。

上記例のように、PHPファイルで変数を割り当てたテンプレート変数を使用して、「{if [式]}式が真の場合の値(リテラル){elseif}式が偽の場合の値(リテラル){/if}」をテンプレートファイルに記述します。
[式]がPHPスクリプトとして実行され、評価されます。従って、[式]の評価(true,false)はPHPの言語文法に従います。例えば、0以外の数値であれば「true」と評価されますし、空文字('')の文字列は「false」として評価されます。※詳しくは公式ドキュメントをご参照ください。>>PHPドキュメント

ifステートメント構文には、①{if [式]}{elseif}{/if}と、②{if [式]}{/if}の2種類があります。

①{if [式]}{elseif}{/if}の構文は以下のようになります。

【構文】
{if [式]}式が真の場合の値(リテラル){elseif}式が偽の場合の値(リテラル){/if}
【記述例】
{if $number == 1}
	変数numberは真です
{elseif}
	変数numberは偽です
{/if}

内部的な処理として、[式]の評価が真の場合は、ifステートメント文全体が「式が真の場合の値」に置き換わり、[式]の評価が偽の場合は、ifステートメント文全体が「式が偽の場合の値」に置き換わります。

②{if [式]}{/if}の構文は以下のようになります。

【構文】
{if [式]}式が真の場合の値(リテラル){/if}
【記述例】
{if $string == 'Show'}
	このブロックは表示されます
{/if}

内部的な処理として、[式]の評価が真の場合は、ifステートメント文全体が「式が真の場合の値」に置き換わり、[式]の評価が偽の場合は、ifステートメント文全体が空文字に置き換わります。

ifステートメント構文の具体的な活用例ですが、PHPロジックファイル内での値によって、表示・非表示を切り替えたい場合などに使用できます。例えば、ログイン認証処理を終えたユーザに対してはAを表示し、非ログインユーザにはBを表示する場合などです。

ループ構文(foreach構文・section構文)内でのif構文処理

SimpleTemplateでは、①foreach構文・②section構文のループ構文内で、配列変数を使用して「if構文処理」を行うことが出来ます。 まず、①foreach構文から具体例を見てみましょう。

【PHPファイル】
$arrMessage = array(
      'test01' => 'テストメッセージ01',
      'test02' => 'テストメッセージ02',
      'test03' => 'テストメッセージ03');

// テンプレート変数の割り当て
$template->assign('arrMessage', $arrMessage);
【テンプレートファイル】
<ul>
{foreach from=$arrMessage key=k value=v}
  <li {if $v == 'テストメッセージ02'}style="font-style:italic"{elseif}
  style="text-decoration:line-through"{/if}>{$k}:{$v}</li>
{/foreach}
</ul>
【出力結果】
  • test01:テストメッセージ01
  • test02:テストメッセージ02
  • test03:テストメッセージ03

上記例のように、foreach構文内で配列変数(例では、$v)を使用してif判定を行うことができます。
ifステートメント構文(条件分岐処理)でご説明したように、if内の[式]はPHPスクリプトとして実行され、評価されます。
※詳しくは公式ドキュメントをご参照ください。>>PHPドキュメント
例では、ループ配列のバリュー($value)を使用しておりますが、キー($key)を使用して「{if $k == 'test02'}」とすることも可能です。
また、例では①{if [式]}{elseif}{/if}を使用しておりますが、②{if [式]}{/if}を使用することも可能です。

次に、②section構文内のでif構文処理の具体例を見て行きましょう。

【PHPファイル】
$arrVariable = array(
      array('foo' => 'foo01',
            'some' => 'some01',
            'any' => 'any01'),
      array('foo' => 'foo02',
            'some' => 'some02',
            'any' => 'any02'),
      array('foo' => 'foo03',
            'some' => 'some03',
            'any' => 'any03'),
      array('foo' => 'foo04',
            'some' => 'some04',
            'any' => 'any04'),
      array('foo' => 'foo05',
            'some' => 'some05',
            'any' => 'any05')
      );

// テンプレート変数の割り当て
$template->assign('arrVariable', $arrVariable);
【テンプレートファイル】
<ul>
{section loop=$arrVariable}
  <li {if $arrVariable.foo == 'foo03'}style="font-weight:bold"{/if}>
  {$arrVariable.foo}:{$arrVariable.some}:{$arrVariable.any}</li>
{/section}
</ul>
【テンプレートファイル】
      
  • foo01:some01:any01
  •   
  • foo02:some02:any02
  •   
  • foo03:some03:any03
  •   
  • foo04:some04:any04
  •   
  • foo05:some05:any05

上記例のように、section構文内で配列変数(例では、$arrVariable.foo)を使用してif判定を行うことができます。
例では②{if [式]}{/if}を使用しておりますが、①{if [式]}{elseif}{/if}を使用することも可能です。 ①foreach構文・②section構文のループ構文内でのif構文処理ですが、例でも示したように配列変数の値を判定してスタイルを適用する場合に便利です。