作成日:2006/08/07
4B.2.4 ブロック関数と配列変数の使用
<div id="sidebar">
<ul>
<{if isset($menu)}>
<li><h3>Menu</h3>
<ul class="menu">
<{foreach item=menu_item from=$menu}>
<li><a href="<{$menu_item.url}>"><{$menu_item.title}></a></li>
<{/foreach}>
</ul>
</li>
<{/if}>
ブロック関数はテンプレート関数の一種で、PHPのif文やforeach文などのようにブロックを作る事ができます。 最も良く使われるブロック関数はif関数とforeach関数です。 if関数はテンプレート変数による条件分岐を、foreach関数は配列要素にアクセスするために使用されます。
- if関数:
- <{if 条件式}> ・・・ <{elseif 条件式}> ・・・ <{else}> ・・・ <{/if}> <{* 条件式にはPHPで使用できる全ての演算子と関数が利用できます *}>
- foreach関数:
- <{foreach from=$array item=identifier [key=identifier] }> ・・・ {/foreach} <{* 配列のキーにアクセスする場合はkey属性を指定します *}>
Smartyでは配列要素にアクセスのに2つの方法があります。
| 配列の種類 | 表記法 |
|---|---|
| 添字配列 | {$array[0]}
{$array[1]} |
| 連想配列 | {$hash.key} |
上例ではforeach関数を使って添字配列の要素にアクセスしています。そして、その要素は連想配列です。 少し分かり難いですが、PHPがテンプレート変数をアサインしている(以下の)コードを見れば、よく理解できると思います:
foreach($contents as $name)
{
・・・・
$menu[] = array('title' => $title, 'url' => $url);
}
$objSmarty->assign('menu', $menu);
