Smartyのforeachで配列に何もない時の処理

こんにちは、さるまりんです。

久しぶりのSmartyの小ネタです。

タイトル通りSmartyのforeachに渡された配列に何もない場合に処理を分岐したい時は{foreachelse}を使います。

{foreach from=配列 item=繰り返しの要素}
  配列が空でない時の処理
{foreachelse}
  配列が空の時の処理
{/foreach}

利用例です。

$selectedItemsは選択された「もの」を格納する配列です。$selectedItemsに要素が設定されている場合はそれらを表示し、$selectedItemsが空の場合は「何も選択されていません。」の文字列を表示します。

{foreach from=$selectedItems item=item name=itemloop} 
  <p>{$smarty.foreach.itemloop.iteration} - {$item}</p>
{foreachelse}
  <p>何も選択されていません。</p>
{/foreach}

例えば$selectedItemsがこのようなデータを持っているとします。
$selectedItems = ['お花', 'コイン', 'ハンマー'];

上記のコードは次のようなhtmlになります。

<p>1 - お花</p>
<p>2 - コイン</p>
<p>3 - ハンマー</p>

以前書かせてもらいました$smarty.foreach.ループ名.iterationは繰り返しの何回目かを表します。

これが$selectedItemsが空の場合は次のようなhtmlになります。

<p>何も選択されていません。</p>

知っているとちょっと便利なので覚えるためにメモでした。

読んでくださってありがとうございました。

それではまた!