Smarty:Smartyでエスケープをしない方法(smarty:nodefaults)

Smartyでデータを出力する際に自動でエスケープ処理をするように設定していることが多いと思います。
しかし、変数によってはエスケープしないで出力したい場合があります。

テンプレート内の変数に「smarty:nodefaults」を指定すればエスケープ処理されずに出力することが可能です。

※Smartyのバージョンによっては記述が違う場合があるそうなので注意が必要です。

下記にSmartyでテンプレート変数をエスケープしないで出力する方法をメモします。


■ エスケープ処理をしない方法

Smartyクラスで全ての変数にエスケープ処理を指定している場合です。
配列で設定すれば、複数の修正子を設定することができます。

$smarty->default_modifiers = array('escape:"html"');

変数に対して「smarty:nodefaults」を指定します。

{$test|smarty:nodefaults}

上記のように指定すれば、エスケープ処理されずに出力することができます。


■ default_modifiers

テンプレート内で使用する全ての変数に適用する修飾子を指定します。
指定したものはデフォルトで適用されるようになります。

$smarty->default_modifiers = array('', '');

■ 個別にエスケープ処理を指定する場合

{$test|escape:"html"}

個別にエスケープ処理をかける場合はエスケープ漏れがあるかもしれないので、
規定でエスケープ処理をかけるように設定した方がいいと思います。

Smarty:Smartyでforeachをする方法

Smartyでforeachを使用して、繰り返し(ループ)処理をする方法をメモします。

システムを実装していると、データをforeachしてループさせることが結構あります。

phpの場合と記述方法が違うので注意です。


■ Smartyでforeachをする方法

【phpの場合】

foreach ($data as $key => $value) {
	echo $key;
	echo $value;
}

【Smartyの場合】

{foreach from=$data item=value key=key}
	{$key}
	{$value}
{foreachelse}
	データがない場合の処理を記述
{/foreach}

fromに配列を指定し、itemに値の名前、keyにキーの名前を指定します。
データがない場合、「foreachelse」に入ります。


Smarty:Smartyでfor文を使用する(section)

Smartyでphpのfor文のようにループを行いたい場合があります。
フォームなどで選択する月や日などはループさせて出力することが多いです。

phpの記述と違って、Smartyではsectionを使用します。

今回はSmartyのsectionを使用して、phpのfor文と同じように使用する方法をメモします。


■ Smartyのsectionでfor文のように使用

【phpの場合】

for ($i = 1; $i < 13; $i++) {
	echo $i;
}

【Smartyの場合】

{section name=i start=1 loop=13}
	{$smarty.section.i.index}
{/section}

Smartyではfor文ではなく、sectionを使用してループさせます。
startに初期値を設定します。


Smarty:Smartyでnumber_formatする方法

Smartyで数値をカンマ区切りして出力する場合、number_formatを使用します。
phpのnumber_format()と同じように使用することが可能です。
金額を出力するときなど便利です。

今回はSmartyでnumber_formatを使用し、数値をカンマ区切りして出力する方法をメモします。


■ Smartyでnumber_format

$numに「1000」が入っている場合

【phpの場合】

number_format($num);

【Smartyの場合】

{$num|number_format}

【出力結果】

1,000

phpと同じようにカンマ区切りで出力することができます。
※「|」の前後に半角スペースを入れた場合、動作しなかったので注意です。


Smarty:phpの定数をSmartyで使用する方法

phpで設定した定数をSmartyテンプレートで使用したい場合、下記のように予約変数を使用して値を取得します。
※予約変数「$smarty」は環境変数やリクエスト変数を取得する時に使用します。


■ phpで設定した定数をSmartyで使用する場合

{$smarty.const}

【php】

define('HOGE_DATA','hoge');

【Smarty】

{$smarty.const.HOGE_DATA}

また、Smartyの予約変数ではサーバ変数なども取得することができます。

■ サーバ変数を使用する場合

{$smarty.server}

・$_SERVER[‘HTTP_HOST’]を取得する場合

{$smarty.server.HTTP_HOST}

その他下記の値も取得することができます。

{$smarty.get}
{$smarty.post}
{$smarty.cookies}
{$smarty.session}
{$smarty.request}