nihimotoの日記スマートフォン用の表示で見るnihimotoの日記https://mapsengine.google.com/map/edit?mid=zhpqXW1XM-zc.kmD-c8p1GAWIこの広告は、90日以上更新していないブログに表示しています。2007-07-15SmartyのテンプレートをShift_JISで記述するにはPHPSmartyのテンプレートは実はEUC-JPが基本になっています。そもそもデザインとプログラムを分離するという目的がありながら、デザイナーが普段使わないEUC-JPでのコーディングを求めるとはいかがなものでしょうか。思いましたが、仕方ないのでShift_JISで動かす方法を探してみました。マルチバイト処理を考慮して開発されているわけではないので、テンプレートファイルをEUC-JP以外の文字コードエンコーディングで記述してしまうと上手く動作してくれません。携帯電話向けのサイトなどで、ページをどうしてもShift_JISで出力したい場合は「プリフィルタ」および「ポストフィルタ」という機能を使用してエンコーディング変換を行いますプリフィルタプリフィルタ(pre-filter)は、テンプレートがコンパイルされる前に呼び出されるユーザ定義関数です。関数をプリフィルタとして登録するには、関数名を引数としてSmartyインスタンスのregister_prefilter()メソッドを呼び出します。$smarty->register_prefilter("convert_encoding_to_eucjp");上記の場合は、テンプレートのコンパイルに先立ってconvert_encoding()関数が呼び出されます。Smartyインスタンスのリファレンスが渡されるので、ソースコードに対して必要な処理を行った結果を戻り値として返すようにします。$template_source;}ポストフィルタポストフィルタ(post-filter)は、テンプレートがコンパイルされた後に呼び出されるユーザ定義関数です。関数をポストフィルタとして登録するには、関数名を引数としてSmartyインスタンスのregister_postfilter()メソッドを呼び出します。convert_encoding_to_sjis()関数が呼び出されます。関数には第一引数としてテンプレートのコンパイル済みのソースコードが、第二引数としてSmartyインスタンスのリファレンスが渡されるので、ソースコードに対して必要な処理を行った結果を戻り値として返すようにします。