smartyとはphpプログラムのテンプレートエンジンです。
これによりデザインとロジックのコーディングを分けることができるためプログラムがスッキリします。
また、魅力的なのが値を指定したフォーマットに変換する機能があります。
{$hoge|escape}・・・HTMLタグをエスケープ {$hoge|nl2br}・・・改行コード変換 {$hoge|date_format:"%Y年%m月%d日 %H時%M分"}・・・日付フォーマット {$hoge|number_format}・・・カンマ編集
これらの機能でもとても有用なのですが、すべてが揃っている訳ではありません。
サイトごとやページごとに特殊な変換が必要な項目がある場合、何度も変換処理をプログラムに書き込んでしまい、ついつい煩雑なります。
そこで、smartyの変換プログラムを自分で作ればさらにsmartyは威力を発揮します。
たとえば・・・
文字列の中にURLがあった場合、自動でリンクを付ける処理などが便利です。
function smarty_modifier_auto_link($string, $type = 'url', $text = 'URL') { // URL正規表現文字列 $regstr = "https?://[a-zA-Z0-9.-]{2,}(:[0-9]+)?(/[_.!~*a-zA-Z0-9;/?:@&=+$,%#-]+)?/?"; switch ($type) { case 'url': return ereg_replace($regstr,"\\0", $string); break; default: return $string; } }
こちらのソースをmodifier.auto_link.phpとして/Smarty/plugins/に保存すれば完了です。
使用例
{hoge|auto_link}
文字列を指定の文字数で切り落とす
function smarty_modifier_mb_truncate($string, $length = 80, $etc = '...') { if ($length == 0) {return '';} if (mb_strlen($string) > $length) { return mb_substr($string, 0, $length).$etc; } else { return $string; } }
使用例
{$hoge|mb_truncate:14}
smartyがマルチバイトに対応していない為のものです。
これらの他にも、各サイトごとに必要になるものは変わってくると思います。
非常に有用なものですので、現在の仕様に応じて作ってみては如何でしょうか?