値が空の時の処理{foreachelse}

広告

{foreach}関数ではPHPスクリプトから配列が渡されてきますが、「from」属性に記述した変数に対してPHPスクリプト側から値が渡されてこなかった場合に実行される処理を記述することが出来ます。書式は次の通りです。

{foreach from=配列変数 item=要素を格納する変数}
  繰り返し処理の中で行う処理
{foreachelse}
  from属性に指定した変数の値が存在しない場合の処理
{/foreach}

PHPスクリプト側から値が渡されてこなかった場合には{foreachelse}から{/foreach}までに記述した処理が実行されます。

例えば次のように記述します。

{foreach from=$personaldata item=var name=loopname}
<p>要素:{$var}</p>
{foreachelse}
<p>値がありません</p>
{/foreach}

サンプルプログラム

では簡単なサンプルプログラムを作成して試してみます。

sample8-1.php

<?php

require_once('Smarty.class.php');

$smarty = new Smarty();

$smarty->template_dir = 'd:/smartysample/foreach/templates/';
$smarty->compile_dir  = 'd:/smartysample/foreach/templates_c/';
$smarty->config_dir   = 'd:/smartysample/foreach/configs/';
$smarty->cache_dir    = 'd:/smartysample/foreach/cache/';

$smarty->assign('title', '繰り返し処理のテスト');

$smarty->display('sample8-1.tpl');

?>

上記を「sample8-1.php」の名前で「(Apacheドキュメントルート)¥smarty¥foreach」に保存します。

sample8-1.tpl

{* Smarty foreach/sample8-1.tpl *}
<html>
<head>
<title>Smarty Test</title>
</head>
<body>

<h1>{$title}</h1>
{foreach from=$personaldata item=var name=loopname}
<p>要素:{$var}</p>
{foreachelse}
<p>値がありません</p>
{/foreach}

</body>
</html>

上記を「sample8-1.tpl」の名前で「D:¥smartysample¥foreach¥templates」に保存します。

そしてブラウザから「http://localhost/smarty/foreach/sample8-1.php」へアクセスして下さい。

値が空の時の処理{foreachelse}

( Written by Tatsuo Ikura )