やぎLabs

ethnaモバイル版の改良あれこれ-その1-

いままでethnaを色々携帯電話サイト用に改良してきたのでまとめてみる

主な機能

  • キャリアによるテンプレート分け
  • 絵文字対応とsmartyプラグイン
  • テンプレートのSJIS化
  • セッション対応
  • auとsoftbankのキャッシュ無効
  • Ethna_Util::isDuplicatePost()の一時ファイル名にIPアドレスをつけないように修正(IPアドレスがころころ変わるので)
  • smartyプラグイン関数utnをget用とpost用に関数を分ける。同時にセッション有無でのutnタグの有り無しを追加

とりあえずこんな感じ。他にも色々必要ですが簡単なサイトならこんな感じで十分対応できると思います。

キャリアによるテンプレート分け

最初の頃のエントリにも書いてあるのでここでは割愛いたします。

絵文字対応とsmartyプラグイン

まず文字のmapを作成します。

私は自力で絵文字マップを作りました。こんな感じです

$emoji = array(‘sun’ => array(‘ドコモの絵文字’, ‘auの絵文字’, ‘softbankの絵文字’)…….);

という風に絵文字に独自に名前付けて関連しそうな絵文字の16進数を入れます。

後はキャリアによって$emojinumみたいなのを定義してドコモなら0、auなら1、softbankなら2という風にしておきます。

後はテンプレート側で呼び出すのを便利にするようにsmartyプラグインを作ります。こんな感じ

function smarty_function_emoji($params,&$smarty)

{

$var = $smarty->get_template_vars(‘app_ne’);

$emoji_list = $var[‘emoji’];

$emojinum = $var[‘emojinum’];

return $emoji_list[$params[‘emoji'[$emojinum];

}

テンプレートのSJIS化

これがある意味非常に迷うところ(文字化け)こんな感じでやってみた

簡単にsmartyのoutputfilterを使ってEUC-JPからSJISに変更

function smarty_outputfilter_encode($output, &$smarty)

{

// 全角カタカナを半角カタカナに変換

$output = mb_convert_kana($output,’k’);

return mb_convert_encoding($output, “SJIS-win”, “eucJP-win”);

}

あと入力はappID_ActionForm.phpにactionFormのfilterをオーバーライド

/**

* フォーム値変換フィルタ: 半角カナ->全角カナ

* 濁点対応のためにオーバーライド byやぎ

* @access protected

* @param mixed $value フォーム値

* @return mixed 変換結果

*/

function _filter_kana_hantozen($value)

{

$value = mb_convert_encoding($value, ‘eucJP-win’, ‘SJIS-win’);

$value = mb_convert_kana($value, “KV”);

return $value;

}

後は2バイト文字のform値のときにfilter => ‘kana_hantozen’で呼び出してやればおk

今回はこんな感じで。次回に残りを書きます