.Water-Sunlight
.サイトメニュー
.検索
.オンライン状況
登録ユーザ: 0
ゲスト: 7
.
<< Prev
テンプレート関数
« INDEX »
PHP テンプレート編
Next >>
カスタム関数
作成日:2006/08/07

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プロパティ:
foreachプロパティを使って foreach の状態を獲得することができます。 これには予約変数 smarty.foreach.foreach_name.property を使用します。 foreach_name は foreach の name属性です。

property説明
iteration
現在の反復回数(1〜)
first
最初の反復の場合 true
last
最後の反復の場合 true
show
from属性で指定した配列変数に値が存在しない場合 true
total
ループの総回数(ループの後も有効)

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}

if関数で使えるSmarty独自の演算子
用例意味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ロパティ:
sectionプロパティを使って foreach の状態を獲得することができます。 これには予約変数 smarty.section.fsection_name.property を使用します。 fsection_name は section の name属性です。

property説明
index
現在の添字
index_prev
前回の添字(初回は-1)
index_next
次回の添字(最後は計算上の値になり、実際は実行されない)
iteration
現在の反復回数(1〜)
first
最初の反復の場合 true
last
最後の反復の場合 true
rownum
iteration のエイリアス
loop
ループの最後の添字(ループの後も有効)
show
loop属性で指定した配列変数に値が存在しない場合 true
total
ループの総回数(ループの後も有効)

strip
{strip}
 ・・・
{/strip}

strip関数は、テンプレート出力される各行の先頭と終端にある余分な空白文字や改行文字を除去します。 これによってテンプレートの可読性を維持しつつ、余分な空白文字を除去できます。

<< Prev
テンプレート関数
« INDEX »>
Page Top
Next >>
カスタム関数

.