Smarty研究(4) URL らしき文字列に自動でリンクをはる修飾子

Smarty研究(4) URL らしき文字列に自動でリンクをはる修飾子

久々に Smarty のお話。
今回は、URL と思しき文字列を自動でリンクする修正子を作る、です。

とあるプロジェクトで、URL を自動でリンクする必要性が出てきた時に、
相変わらず面倒くさがりS級ライセンス保持者の僕は、
「自前で作るのめんどくさいーなんかいいもんないかー」とブツブツ言いながら
以前のプロジェクトの Smarty のプラグインディレクトリを覗いていたら、
ありました!その名も「auto_link」!なあんだ、便利なもんあるじゃん。
と思ってソースをよく見てみたら、
「 * @author Kimoto」
俺じゃん!作ったの!全然おぼえてねぇー!

はい。という事で、ソースです。

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,"<a href=\"\\0\" target=\"_blank\" title=\"\\0\">\\0</a>", $string);
            break;
        case 'text':
            return ereg_replace($regstr,"[ <a href=\"\\0\" target=\"_blank\" title=\"\\0\">{$text}</a> ]", $string);
            break;
        default:
            return $string;
    }
}

これを「modifier.auto_link.php」という名前で保存し、「smarty/libs/plugins」の中に放り込めば、

$smarty->assign('string', 'シーブレインはこちら http://c-brains.jp/');

ってな感じに assign して、テンプレート内で

{$string|auto_link}

とすることで

シーブレインはこちら http://c-brains.jp/

と、このように表示されます。 また、オプションとして、

{$string|auto_link:"text":"URL"}

などとすると

シーブレインはこちら [ URL ]

こんな感じになります。

ということで、作った本人に忘れられていた可哀想な修飾子ですが、
良ければ使ってあげてください。

  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ