人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Smartyのアウトプットフィルタの使い方について質問です。

出力を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)

●質問者: kt26
●カテゴリ:ウェブ制作
✍キーワード:blog Class INDEX JIS ON
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● rouge_2008
●60ポイント

$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」を使用する場合は、同じファイルに記述するといいです。

なるほど。納得しました。register_outputfilterの指定は同じファイルに記述すれば有効なんですね。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ