4C.4.1 組み込み関数
以下にSmatryに組み込まれているテンプレート関数の一覧を示し簡単な説明をします。 また、よく使うと思われるテンプレート関数については例題を挙げておきます。 詳細は公式のSmartyマニュアルを参照して下さい。
| 構文 | 説明 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
capture
{capture
[name=string]
[assign=string]}
・・・
{/capture}
|
テンプレートの出力を指定さらた変数に格納します。 例えば、name属性が foo の場合、その値は、予約変数の $smarty.capture.foo に格納されます。 name属性のデフォルトは default です。 用例:
{capture name=contents}
{$contents}
{/capture}
{if $show_contents}
<div>{$smarty.capture.contents}</div>
{/if}
|
||||||||||||
config_load
{config_load
file=string
[section=string]
[scope=string ]
[global=boolean ]}
|
file属性で指定された設定ファイルを読み込みます。 section属性を指定した場合は、設定ファイル内のグローバル変数と指定されたセクション内の変数を読み込みます。 そうでない場合は、グローバル変数だけを読み込みます。 用例:
{config_load file="season.conf" section="summer"}
|
||||||||||||
foreach
{foreach
from=$array
item=identifier
[key=identifier]
[name=identifier]}
・・・
{foreachelse}
・・・
{/foreach}
|
foreach は配列変数(添字配列も連想配列も可能)をループするために使われます。 from属性で配列変数を指定し、item属性で配列値を受ける変数名を指定します。 配列のキーを受ける場合はkey属性に変数名を指定します。 foreachループに名前を付ける場合はname属性を使用します。foreachの名前は予約変数の $Smarty.foreachで使用する事ができます。 from属性で指定した配列変数に値が存在しない場合は、foreachelseが実行されます。 用例1:シングルループ
{foreach key=key item=item from=$menu}
{$key}:{$item}<br/>
{/foreach}
用例2:ダブルループ
{foreach name=outer item=sub_nemu from=$menu}
{foreach name=inner key=key item=item from=$sub_nemu}
{$key}: {$item}<br />
{/foreach}
{/foreach}
foreachプロパティ:
|
||||||||||||
include
{include
file=string
[assign=string]
[var=var type]}
|
file属性で指定されたテンプレートをインクルードします。 include の出力を変数に格納する場合は、assign属性でその変数名を指定します。 インクルードするテンプレートに変数を渡す事ができます。 これらの変数はインクルードしたテンプレートのスコープ内でのみ有効です。 そのテンプレートで同じ変数名が使用されている場合は、その変数が上書きされます。 用例:
{include file="header.tpl"}
{include file="menu.tpl" title="Main Manu"}
|
||||||||||||
include_php
{include_php
file=string
[once=boolean]
[assgin=string]}
|
file属性で指定されたPHPファイルをインクルードします。 テンプレートに直接PHPコードを記述できるphp関数は、デザインとロジックの分離の原則に反します。 この場合はinclude_php関数を使ってphpスクリプトをテンプレートに取り込みます。 但し、Smarty ではinclude_php も推奨されていません。 通常、この目的のためにはプラグイン(カスタム関数)を使用します。 用例:
{include_php file="/php_path/foo.php"}
|
||||||||||||
insert
{insert
name=string
[assgin=string]
[script=string]
[var=var type]}
|
file属性で指定されたテンプレートをインクルードします。 insert は、include とよく似ていますが、テンプレートのキャッシュが有効であっても insert による出力はキャッシュされません。 insertは以下のような場合に有用です。
用例:
<div class="banner">
{insert name="banner" id=$banner_id }
</div>
|
||||||||||||
if
{if 条件式}
・・・
{elseif 条件式}
・・・
{else}
・・・
{/if}
|
Smartyでは、if関数を使ってPHPのif文に等しいレベルの条件分岐ができます。 if 以外に else と elseif も使用できます。 if 関数で使用できる条件演算子は、PHPと同じものとSmarty独自のものがあります。 条件演算子はスペースによって分離されている必要があります。また(これは重要なことですが)、 if関数の中では、全ての PHP 条件演算子と関数が使用できます。 用例:
{if $color == "red"}
・・・
{elseif $color == "green"}
・・・
{else}
・・・
{/if}
用例:Smarty独自の演算子
{if $line_no is even}
・・・
{else}
・・・
{/if}
|
| 用例 | 意味 | PHPでの表記 |
|---|---|---|
$a eq $b | 同等 | $a == $b |
$a ne $b | 否定(二項演算子) | $a != $b |
$a gt $b | 大きい | $a > $b |
$a lt $b | 小さい | $a < $b |
$a ge $b | 以上 | $a >= $b |
$a le $b | 以下 | $a <= $b |
not $a | 否定(単項演算子) | ! $a |
$a mod $b | 剰余 | $a % $b |
$a is [not] div by $b | 割り切れる | ($a % $b)==0 |
$a is [not] even | 偶数 | ($a % 2)==0 |
$a is [not] even by $b | 商が偶数 | (($a/$b) % 2)==0 |
$a is [not] odd $b | 奇数 | ($a % 2)!=0 |
$a is [not] odd by $b | 商が奇数 | (($a/$b) % 2)!=0 |
| 構文 | 説明 | ||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ldelim/rdelim
{ldelim}
{rdelim}
|
デリミタのリテラル( デフォルトは { と } ) を表示するために使います。 用例:
{ldelim}ldelim{rdelim}はSmartyの左デリミタを表示します
|
||||||||||||||||||||||
literal
{literal}
・・・
{/literal}
|
literal関数は javascriptや stylesheetとのデリミタの競合を防ぐために使用されます。 用例:
{literal}
<script type="text/javascript">
function foo(){
・・・
}
</script>
{/literal}
|
||||||||||||||||||||||
php
{php}
・・・
{/php}
|
php関数はテンプレートにphpコードを直接記述するために使います。 これはデザインとロジックの分離の原則に反しますので、あまり推奨されません。 |
||||||||||||||||||||||
section
{section
name=identifier
loop=$variable
[start=integer]
[step=integer]
[max=integer]
[show=boolean]}
・・・
{sectionelse}
・・・
{/section}
|
sectionは配列変数(添字配列のみ)をループするために使われます。 loop属性で配列変数を指定し、name属性で添字を受ける変数名を指定します。 name属性は他のsectionに対してお互いにユニークである必要があります。 section はforeach の場合と異なり連想配列のキーを取得することができまん。 一方、添字配列の開始位置(start属性)、増分(step属性)、最大反復回数(max属性)を指定する事ができます。 sectionの名前(name属性)は予約変数の $Smarty.sectionで使用する事ができます。 loop属性で指定した配列変数に値が存在しない場合は、sectionelse が実行されます。 用例:
{section name=index loop=$id}
id: {$id[index]}<br />
{/section}
sectionロパティ:
|
||||||||||||||||||||||
strip
{strip}
・・・
{/strip}
|
strip関数は、テンプレート出力される各行の先頭と終端にある余分な空白文字や改行文字を除去します。 これによってテンプレートの可読性を維持しつつ、余分な空白文字を除去できます。 |
