あまり知られていない(?)Smartyフィルターの利用法(2)

Date 2006-07-10 06:26:44 | Category: XOOPS

in englishin japanese
SmartyフィルターTipsの第2回。

SmartyのModifierとしてプラグインではなく、通常の関数を利用する場合、その関数は以下のように呼び出されます。

Smarty内表記:
<{param1|function:param2:param3:param4}>

実際の呼び出しコード:
echo function( param1 , param2 , param3 , param4 ) ;

(※より正確には、第1引数が配列の場合には、子要素すべてにその関数を適用する、なんて親切なのかお節介なのか良く判らないコードも含めてコンパイルされていますが、ここでは対象を文字列に限定します)

PHPの文字列関数だと、第1パラメータに元となる文字列を指定することが多いので、この仕様でもOKなのですが、正規表現関数や日付関数などはそうではありません。

例えば、日本における最も一般的な日付表記は、Y/n/j だと思いますが、Smartyのデフォルトプラグインに存在するdate_formatは、strftime()のラッパなので、これと同じ表現を行うことが出来ません。

でも、上の法則をよく見てちょっと頭をひねれば、解決法が見えてきます。$news.created にUNIX_TIMESTAMP形式でアサインされていた場合、Smarty側でこのように表記します。

<{"Y/n/j"|date:$news.created}>

なんだかちょっと変だな、と思うかも知れませんが、上のルールで変換すれば判りやすいでしょう。

echo date( "Y/n/j" , $news['created'] ) ;

PHPプログラマなら、ここでポンと膝を叩けると思います。

プログラマではないデザイナの皆さんにとってももちろん強力なツールたり得ます。今まで、Modifierプラグインとして用意されたものしか存在しなかった引き出しが、PHPの標準的な文字列関数・数学関数・日付関数・正規表現関数など、一気に増えるわけです。

tplsadminもしくはaltsysを使って、PHP関数リファレンスでも片手に、いろいろ試してみると良いでしょう。

次回は、Modifierとしての関数利用における制限について書きます。




You can read more news at PEAK XOOPS.
http://xoops.peak.ne.jp

The URL for this story is:
http://xoops.peak.ne.jp/md/news/index.php?page=article&storyid=133