モバイルサイトをZend Framework+Smartyで構築中

12月 4th, 2009 by admin Leave a reply »

いつものごとく、サイトを作るときはZend Framework+Smartyで作ってます。
今回携帯サイトを作ることになったのですが
けっこう難しかったのでメモ。

最初の構想はshift-jisでphpもテンプレートもmySQLはset namesでやっちゃえば
それだけで充分いけるだろうって考えていたのに甘かった。。

最初につまづいたのがshift-jisで書かれたテンプレート。
Smartyはshift-jisが未対応のようで、構文エラーを起こします。

なので全てをutf-8で作って最後にshift-jisで出力する作戦に変更。
プラグインフィルターを使って出力直前にエンコード変換させるので
display直前で
$this->register_outputfilter( array($this,”utf_to_shift_filter”) );
を入れました。
クラス内で関数名指定をするときはこんな書き方です。
utf_to_shift_filterは単純で単にエンコード変換して返すだけです。

/**
 * エンコード変換
 */
function utf_to_shift_filter($buff, &$smarty){
    $buff = mb_convert_encoding($buff, 'Shift-jis', 'UTF-8');
    return $buff;
}

プラグインフィルターを最初に設定しちゃうとfetchでテンプレートを取得するときに変換され、displayで2度変換されちゃいます。
やって欲しいのは最後の1回でいいのでdisplay直前に。

.htaccessファイルに
AddDefaultCharset UTF-8
を入れてあるとheaderに勝手に
Content-Type text/html; charset=UTF-8
が勝手に入ってしまうので抜きました。

クッキーが使えない想定でパラメーターでセッションを管理します。

ini_set('session.use_trans_sid', 1);

を追加。
サイト内パスが絶対になっているとセッションIDが自動で付きません。
(判明するまで苦労した;)

Advertisement

コメントを残す