変数

テンプレート変数は、先頭にドル記号 $ を付けます。変数名には PHP の変数 と同様に英数字およびアンダースコアが使用できます。 配列の参照には、インデックスの数値もしくはそれ以外の文字を使用できます。 オブジェクトのプロパティとメソッドの参照も同様です。

Config ファイルの変数 にはドル記号を付けず、参照する際にはハッシュマーク # で囲むか、 $smarty.config 変数として指定します。

例 3.2. 変数


{$foo}        <-- 単純な変数 (配列やオブジェクト以外) を表示します。
{$foo[4]}     <-- 0から始まるインデックスを持った配列の5番目の要素を表示します。
{$foo.bar}    <-- "bar"というキーに対応する配列の値を表示します。PHP の $foo['bar'] と同じです。
{$foo.$bar}   <-- 変数のキーに対応する配列の値を表示します。PHP の PHP $foo[$bar] と同じです。
{$foo->bar}   <-- オブジェクトのプロパティ "bar"を表示します。
{$foo->bar()} <-- オブジェクトのメソッド"bar"の返り値を表示します。
{#foo#}       <-- configファイル変数"foo"を表示します。
{$smarty.config.foo} <-- {#foo#}と同じです。
{$foo[bar]}   <-- sectionループ内でのみ正当な構文です。{section}の項を参照のこと。
{assign var=foo value='baa'}{$foo} <--  "baa"を表示します。{assign}の項を参照のこと。

その他多くの組み合わせが可能です。

{$foo.bar.baz}
{$foo.$bar.$baz}
{$foo[4].baz}
{$foo[4].$baz}
{$foo.bar.baz[4]}
{$foo->bar($baz,2,$bar)} <-- パラメータを渡します。
{"foo"}       <-- 静的な値を使用できます。

{* サーバ変数 "SERVER_NAME" の内容を表示します ($_SERVER['SERVER_NAME'])*}
{$smarty.server.SERVER_NAME}

演算やタグの埋め込みもできます。

{$x+$y}                             // x と y の輪を表示します。
{assign var=foo value=$x+$y}        // 属性としての使用
{$foo[$x+3]}                        // 配列のインデックスとしての使用
{$foo={counter}+3}                  // タグ内でのタグ
{$foo="this is message {counter}"}  // ダブルクォートで囲まれた文字列内でのタグ

配列を定義します。

{assign var=foo value=[1,2,3]}
{assign var=foo value=['y'=>'yellow','b'=>'blue']}
{assign var=foo value=[1,[9,8],3]}   // ネストすることもできます

短縮形での代入

{$foo=$bar+2}
{$foo = strlen($bar)}               // 関数の結果の代入
{$foo = myfunct( ($x+$y)*3 )}       // 関数のパラメータとしての代入
{$foo.bar=1}                        // 配列の特定の要素への代入
{$foo.bar.baz=1}                    
{$foo[]=1}                          // 配列への追加

Smarty の "ドット" 構文 (注意: {} の埋め込みは、あいまいさを回避するために使います)

{$foo.a.b.c}        =>  $foo['a']['b']['c'] 
{$foo.a.$b.c}       =>  $foo['a'][$b]['c']         // 配列のインデックス
{$foo.a.{$b+4}.c}   =>  $foo['a'][$b+4]['c']       // 演算結果をインデックスとして使用
{$foo.a.{$b.c}}     =>  $foo['a'][$b['c']]         // インデックスのネスト

"ドット" 構文の代替手段としての、PHP 風の構文

{$foo[1]}             // 通常のアクセス
{$foo['bar']}
{$foo['bar'][1]}
{$foo[$x+$x]}         // インデックスには任意の演算を指定できます
{$foo[$bar[1]]}       // インデックスのネスト
{$foo[section_name]}  // smarty の {section} へのアクセスであり、配列アクセスではなりません!

可変変数

$foo                     // 通常の変数
$foo_{$bar}              // 他の変数を含む変数名
$foo_{$x+$y}             // 演算を含む変数名
$foo_{$bar}_buh_{$blar}  // 複数のセグメントからなる変数名
{$foo_{$x}}              // $x の値が 1 の場合、これは変数 $foo_1 を表示します。

オブジェクトの連結

{$object->method1($x)->method2($y)}

PHP の関数への直接のアクセス

{time()}


  

注意

Smarty では非常に複雑な演算や構文を処理することもできますが、 テンプレートの構文は必要最小限にして表示内容に注力することをお勧めします。 もしテンプレートの構文が複雑になりすぎてきたと感じたら、 表示内容に直接関係のない部分をプラグインや修飾子として PHP 側に追い出すとよいでしょう。

$_GET$_SESSION などのようなリクエスト変数は、 予約済の変数 $smarty の値で取得します。

$smartyconfig 変数{assign} および assign() も参照ください。