出力をShift-JISに変換したいと思い、
以下のソースを書いたファイル(outputfilter.sjis.php)Smartyプラグインに追加しました。
function smarty_outputfilter_sjis($output, &$smarty){
return mb_convert_encoding($output, 'SJIS', 'UTF-8');
}
実行用のファイル(index.php)には以下のように記述しました。
$smarty = new Smarty;
$smarty->compile_dir = 'templates_c';
$smarty->register_outputfilter('outputfilter_sjis');
$smarty->display('index.tpl');
しかし以下のようなエラーメッセージが表示されます。
「Warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'outputfilter_sjis' was given in H:\htdocs\right-blog\test\smarty2\smarty\Smarty.class.php on line 1269」
$smarty->register_outputfilterをコメントアウトするとエラーにならないので
アウトプットフィルタの指定が間違っているのだと思いますが、修正方法がわかりません。
ご存じの方はアドバイスいただければと思います。
(Smartyのバージョンは2.6.26)
$smarty->register_outputfilter('outputfilter_sjis');
上記の「register_outputfilter」の代わりに次のように「load_filter」かあるいは「$autoload_filters」を使用してください。
$smarty->load_filter('output', 'sjis'); // 'sjis'と名付けられたアウトプットフィルタを読み込む
http://sunset.freespace.jp/smarty/SmartyManual_2-6-6J_html/api.l...
※テンプレートを格納したディレクトリ等の指定も忘れないでください。
$smarty->template_dir = '../templates/';
※「$smarty->plugins_dir[] = ''」で指定した自作用プラグインディレクトリに置いた場合は、自動で読み込まれるので「load_filter」等で読み込まなくても良いようです。
http://www.phppro.jp/school/smarty/vol10/1
※「register_outputfilter」を使用する場合は、同じファイルに記述するといいです。(この場合は、「function outputfilter_sjis($output, &$smarty)~」とします。
http://sunset.freespace.jp/smarty/SmartyManual_2-6-6J_html/advan...
なるほど。納得しました。register_outputfilterの指定は同じファイルに記述すれば有効なんですね。