TOP(WebOS) |  TOP(Normal) |    AboutUs |  ContcutUs |  Sitemap

cakePHP1.2で携帯用

cakePHPで携帯用にする方法はいくつかあるようですが、私の場合。

・内部はUTF-8、出力はSHIFT-JIS,入力をUTF-8に変換
app/app_controller.php
if($this->RequestHandler->isMobile()){
   mb_language('ja');
   mb_internal_encoding('UTF-8');
   mb_http_output('SJIS');
   ob_start("mb_output_handler");
   mb_convert_variables("UTF-8", "SJIS", $this->params['url']);
   mb_convert_variables("UTF-8", "SJIS", $this->params['form']);
   mb_convert_variables("UTF-8", "SJIS", $this->data);

・RequestHandler(拡張子)で「.mobile」を使用する。
app/config/routes.phpに追加
Router::parseExtensions('mobile');
app/app_controller.php
$this->RequestHandler->setContent("mobile",'text/html');

app/viewsの各コントローラーおよびlayoutsのフォルダに「mobile」フォルダを作成してビューを配置するのですが、なぜかドコモHPから入手できるiモードHTMLシミュレータでエラーになりました。layout用ビューを秀丸で一度文字コードをSFIFT-JISで保存してからUTF-8で保存しなおすと直りました。

・リダイレクトをオーバーライド,セッションID付加
app/app_controller.php
//redirect メソッド書き換え
 function redirect($url,$status = null) {
  if($this->RequestHandler->isMobile()){
   if(strpos($url, '.mobile') === false) {
    $url = $url.".mobile?".Configure::read('Session.cookie')."=".session_id();
   } else {
    $url = $url."?".Configure::read('Session.cookie')."=".session_id();
   }
   parent::redirect($url,$status);
  } else {
   parent::redirect($url,$status);
  }
}
他にも各リンクでセッションID引き渡しをします。
core.phpの
Security.levelがhighの場合、Session.phpでsession_regenerate_id()(セッションID振り直し)してくれます。

各リンクでセッションID引き渡しがめんどうなら、リーサルウェポンsession.use_trans_sidを使う手も。
core.phpの
Configure::write('Session.save', 'mobilesession');
とかカスタム宣言して、同フォルダにmobilesession.phpファイルを作成。session.phpの457行目以下を参考にしてカスタマイズします。
注意!session.use_trans_sidはPHP5以上でないとini_setできません。