o w o

php関数をSmartyの修正子として使用する方法。とても便利です。
Smarty|php関数を修正子として利用する
データに書式を設定する

[2006-01-30 (月) 13:11]

php関数をSmarty修正子として利用する方法です。記事中Smartyタグは標準の”{~}”で書いています。xoopsの場合は”<{~}>”で括るように変更されています。お間違えのないように。
php関数を修正子として利用する場合の注意事項
【基本構文】

《php関数の構文》

func_name(arg1,arg2,arg3……);
関数名(引数1,引数2,引数3……);

《Smarty修正子の構文》

{引数1|関数名:引数2:引数3……}
php関数の引数1がSmarty変数と同じであれば,
{Smarty変数|php関数名:引数2:引数3……}

日付・時刻の書式設定

たとえば,date関数を使って,日付の書式を指定する場合を考えます。現在日時(ユニックスタイムスタンプ)を日付・時刻書式で表示する場合,php関数では,次のように書きます。

echo date(“Y-n-j H:i:s”,time()); => 2006-1-30 14:15

Smartyにも「date_format」修正子が用意されているのですが,月や日を1桁で表示するフォーマット文字列がありません。そのため,月日を1桁で表示するには,php関数の力を借りなければなりません。次のようにします。

{“Y-n-j H:i:s”|date:$smarty.now} => 2006-1-30 14:15

式中の「$smarty.now」は,Smartyの予約変数で,現在日時の値を返します。
数字の書式設定

数字に3桁区切りなどの書式を設定するには,「numbar_format関数」を使用します。
【number_format関数の概要】

* 3桁ごとに数値を区切ります
* 表示する小数部の桁数を指定できます
* 表示する区切り文字と小数点記号を指定できます

【基本構文】
php関数の場合

number_format(数値[,小数桁数,[小数点文字,桁区切り文字]])

Smarty修正子の場合

{number_format|数値[:小数桁数:[小数点文字:桁区切り文字]]}

【実例集】
実例1:3桁に区切り,整数部だけを表示

小数つきの数値を3桁区切りの整数で表示します。小数1位で四捨五入されます。

《phpで処理する場合》

$var = 1234567890.6543;
echo number_format($var): => 1,234,567,890

《Smartyで処理する場合》

{$var|number_format} => 1,234,567,890

実例2:小数桁数を指定した桁区切り数値の表示

小数部の桁数を(例では2桁に)指定。整数部は3桁ごとにカンマで区切ります。指定桁の次の桁で四捨五入されます。

《phpで処理する場合》

$var = 1234567890.6543;
echo number_format($var,2); => 1,234,567,890.65

《Smartyで処理する場合》

$var = 1234567890.6543;
{$var|number_format:2} => 1,234,567,890.65

整数部は3桁区切り,小数桁数指定,小数点記号と区切り記号を指定する

桁区切り記号に「-」,小数点の代わりに「_」を指定します。

《phpで処理する場合》

$var = 1234567890.6543;
echo number_format($var,2,”_”,”-“); => 1-234-567-890_65

《Smartyで処理する場合》

$var = 1234567890.6543;
{$var|number_format:2:”_”:”-“} => 1-234-567-890_65