前メモからの移行なのでかなり古い情報です。
概要
Smarty には修飾子という概念があり、大変便利です。
変数/関数/文字列などを修飾して出力する時に使用します。
以下のように、”|”(パイプ)指定することにより修飾子を指定することが出来ます。
{$smarty.now|date_format:"%Y/%m/%d"}
上記の例は、$smarty.now
により取得できる現在時刻を yyyy/mm/dd の形式で表示するよう date_format という修飾子を指定したものとなります。
上記の例のように、修飾子に “:”(コロン)を指定することにより、修飾子にパラメータを指定することが出来ます。
上記の例では、”%Y/%m/%d” というパラメータを指定することにより yyyy/mm/dd という形式を指定したことになります。
修飾子に PHP の関数を使う
Smarty では、PHP の関数を修飾子に指定することが出来ます。
以下のように、”@”(アットマーク)を PHP 関数の前に指定します。
{$lines|@count}
上記の例では、修飾子として PHP の count()
関数を指定したことになります。
独自の修飾子
Smarty では、独自の修飾子を使用することも可能です。
例えば、Smarty には truncate
という修飾子がありますが、マルチバイト対応していないので日本語では全く使い物になりません。
以下、mytruncate
というマルチバイト対応した独自の truncate
を作る例を紹介します。
Smarty の独自修飾子を作成するには、smarty のディレクトリにある libs/plugins/
配下に modifier.xxxxx.php
という名前でプラグインファイルを作成します。xxxxx
は修飾子名なので、mytruncate
という修飾子であれば、modifier.mytruncate.php
となります。
内容は以下のように作成しました。
※HTML ベースかつ UTF-8 でしか使わない想定です
function smarty_modifier_mytruncate($string, $length = 80, $etc = '...') {
if ($length == 0) return '';
$string = html_entity_decode($string, ENT_QUOTES, 'UTF-8');
$string = trim($string);
if (mb_strlen($string) > $length) {
$string = mb_substr($string, 0, $length) . $etc;
}
return htmlentities($string, ENT_QUOTES);
}
重要な点は以下となります。
・smarty_modifier_xxxxx
という関数を作成する(xxxxx
は修飾子名)
・パラメータが必要であれば、関数にパラメータの設定も記載する
・修飾した結果を return
で返す
上記で作成した mytruncate
は以下のように使用することが出来ます。
{$body|mytruncate} {$body|mytruncate:'100'} {$body|mytruncate:'100':'---'}
コメント