smartyプラグインでPHPプログラムソースを削減する

By uchida - 08/10/17 - このエントリをはてなブックマークに追加このエントリをYahoo!ブックマークに追加このエントリをdel.icio.usに追加このエントリをFC2ブックマークに追加

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がマルチバイトに対応していない為のものです。

これらの他にも、各サイトごとに必要になるものは変わってくると思います。
非常に有用なものですので、現在の仕様に応じて作ってみては如何でしょうか?