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 ]
こんな感じになります。
ということで、作った本人に忘れられていた可哀想な修飾子ですが、
良ければ使ってあげてください。