条件による分岐({if}文)

条件によって、ある部分は表示したくないなどの場合が出てくると思います。この場合はif,elseif,elseを使用すれば簡単に出来ます。

{if}文を使用したテンプレート

{if}文の構文は下記のようなものになります。下記の例は$_GET['lang']変数によって表示を切り替える場合のテンプレートです。

{if $smarty.get.lang=='jp'}
  こんにちは
{elseif $smarty.get.lang=='ch'}
  <span lang="zh">尓好</span>
{else}
  <span lang="en">Hello</span>
{/if}

{if}文はphpのそれとほぼ同じと考えて良いでしょう。ただし、条件演算子にはphpには存在しない演算子もあります(例えばis div byなど)。詳しくはマニュアルを見てください。

また、{if}文の中ではphpの関数を使用することもできます。

{if empty($data) }
  データが無いよ
{else}
  データがあるよ。
{/if}

$security変数と{if}文

$security変数がTUREの場合、{if}文の中で使うことができる関数は、$security_settings指定されたphp関数のみが利用可能となります。

下記のコードは、Smarty.class.phpに書かれている、デフォルトの$security_settingsの値です。$security変数をTUREにした場合は、'array', 'list', 'isset', 'empty', 'count', 'sizeof', 'in_array', 'is_array'関数が{if}文中で使用可能になります。

var $security_settings  = array(
                                'PHP_HANDLING'    => false,
                                'IF_FUNCS'        => array('array', 'list',
                                                           'isset', 'empty',
                                                           'count', 'sizeof',
                                                           'in_array', 'is_array',
                                                           'true', 'false', 'null'),
                                'INCLUDE_ANY'     => false,
                                'PHP_TAGS'        => false,
                                'MODIFIER_FUNCS'  => array('count'),
                                'ALLOW_CONSTANTS'  => false
                               );

それ以外の関数を使いたい場合は、$security_settings['IF_FUNCS']変数に関数を追加すれば使用可能になります。

Last modified: Mon Feb 18 14:50:57 2008 JST