Smarty/pluginsフォルダあたりを覗いてみると、modifier.escape.phpといったファイルが並んでいます。
実はこれが修正子の正体です。
仕組みは単純で、Smarty内で{$data|escape}という修正子が現れたらmodifier.escape.phpを読み込み、その中のsmarty_modifier_escapeという関数を実行するということになっています。
ところでtruncate修正子に日本語を突っ込むと、区切る文字数も正しくないし区切ったところが文字化けしたりします。
modifier.truncate.phpを見てみると、文字を区切るときにsubstrを使用しています。
substrは日本語に対応していないのでtruncate修正子では日本語を扱うことができません。
そこで日本語に対応したmb_truncate修正子を作成してみましょう。
まずpluginフォルダ内にmodifier.mb_truncate.phpを作成。
中身は簡単にこんなかんじ。
modifier.mb_truncate.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
function smarty_modifier_mb_truncate($string, $length = 80, $etc = '...'){
//引数
$length+=0;
if(!$string || $length == 0){return '';}
//返却
if(mb_strlen($string)>$length){
//長ければ切って返す
return mb_substr($string,0,$length).$etc;
}else{
//短ければそのまま
return $string;
}
}
|
使用するときはテンプレートに
{'あいうえお'|mb_truncate:3}
と書くだけです。
これで自動的にmb_truncate修正子を利用してくれます。
さて、このmb_truncateはSmarty改造の入り口みたいなもので、色々なサイトで解説されています。
http://webtech-walker.com/archive/2007/04/26154112.html
http://jbar.jp/ishimaken/xoops/
http://c-brains.jp/blog/wsg/07/06/14-160910.php
一番下のソースと全く同じことになってますが本当に偶然ですから。
誰が書いてもこんなもんだって。
PR
トラックバック
トラックバックURL: