最近触らなくなったsmartyの話
一時期脚光を浴びたsmarty...
今ではテンプレートエンジン自体が重い、デザイナー想いでないなど、時代の変化とともに、一選択肢でしかなくなりました。現在はsmarty3まで出ているんですね。
ガラケー+smartyという懐かしい環境構築が必要になり、今時UTF-8でもいいんじゃね?みたいな想いもありつつ、SJISで出力したくなった次第
で、ネットで検索すると全盛期の情報が多いせいか、smarty3では使えなくなった情報が上位に来てしまう、まぁ仕方ない。
(PHP)Smartyを使っているがShift-JISで出力したい : old_3流プログラマのメモ書き
ここらを参考にしつつ、クラスのメソッド指定したいなって思うわけです。いつまでもグローバルな関数を作らされては、smartyも使ってられないわけですよ。まぁ用意されてるんで、問題ないれす(^q^)
//ガラケーの場合、コンバート if($this->device == 'mb') { $this->smarty->registerFilter( 'output', array( $this, 'register_outputfilter' ) ); }
スマーティも一テンプレートエンジンなので、テンプレートクラスでラッピングされている状況です。その中身です。だからphptal使うフレームワークなら「$this->phptal」みたくなる。で、registerFilterでガラケーで、さらに出力時だけUTF-8からSJISに変えます。
そこでコンバートのメソッドが、テンプレートクラス内に記述があるわけです。
そいつを叩いてほしいので、関数名の文字列を第二引数に渡すわけではなく、配列で、一つ目にオブジェクトを渡してメソッド名を二つ目にいれます。こうすると、オブジェクトメソッドも無事処理してくれます。
Smartyは、まだ頑張ります!!知らないけど。
おまけ:
/** * register_outputfilter アウトプットフィルタ * テンプレートが実行される時の処理 * @param str $template_source テンプレート * @return コンバートまたは、そのままのテンプレート */ public function register_outputfilter($template_source) { if (function_exists('mb_convert_encoding')) { //文字コードを変換する return mb_convert_encoding($template_source, 'SJIS', 'UTF-8'); } return $template_source; }