PHPからsmartyのテンプレートへ値を渡す場合に、めんどくさいからDBから取得した配列をPHPで加工せずにそのまま渡したい、といった場面がしばしばあります。加工というのは、文字列の操作や改行、文字コードの変換など簡易レベル。
そんな時、smartyテンプレートにPHPの関数を直接書いたりします。例えば以下の処理は、
$str = mb_substr($str, 0, 10);
smartyのテンプレート上で以下のように表現できます。
{$str|mb_substr:0:10}
つまり、以下のルールに従えばPHPで使える関数が、テンプレート上でそのまま利用できるというわけです。
{(第一引数)|(関数名):(第二引数):(第三引数):(第四引数):...}
入れ子も可能です。先ほどの処理に改行コード変換を加えたい場合は、
{$str|mb_substr:0:10|nl2br}
となります。
便利ですねと言いたいところですが、smartyは本来、プログラムとhtmlテンプレートを分離する目的のテンプレートエンジンなので、テンプレート内に関数を記述するのはよろしくないような気がします。
あくまで、何らかの理由での最終手段として留めておいたほうがいいでしょうね。
コメントする