Ktaiライブラリ入門

cakephp 1.2.6で開発してます。

Ktaiライブラリを使ってみました。そのメモ
お手軽に携帯の対応ができるのでオススメです。ライブラリの公開感謝です!

画面出力はSJIS-winで、Cake側は全てViewファイルも含めてUTF-8です。モバイル用のコントローラは独立させてます。

画面出力の文字コード変換は、ヘルパー側でやるようなので、絵文字使わなくてもヘルパーの設置は必須です。vendorsは/app/vendorsじゃなくて、appと同じ位置にあるvendorsディレクトリなので注意が必要です。

1. ktai libraryをダウンロードして設置
ここからダウンロード。

下記のように設置
/app/app_controller.php ← 既存ファイルがある場合は、redirect()の内容だけをコピー
/app/controller/component/ktai.php
/app/config/ktai_session.php
/app/views/helpers/ktai.php
/vendrs/ecw/ ←ecwフォルダごとコピー


2.コントローラを設定

<?php
class HogeMobilesController extends AppController {

    var $name = 'HogeMobiles';
    var $uses = array('Hoge');

    var $helpers = array('Html', 'Form', 'Ktai');
    var $viewPath = 'hoge_mobile';
    var $layout = 'mobile';

    var $components = array( 'Ktai');

    var $ktai = array(
            'enable_ktai_session' => true, //セッション使用を有効にします
            'use_redirect_session_id' => false, //リダイレクトに必ずセッションIDをつけます
            'imode_session_name' => 'csid', //iMODE時のセッション名を変更します
            'input_encoding'  => 'UTF-8', //入力をUTF-8に変更
            'output_encoding' => 'SJIS-win', //出力をSJIS-winに変更
            'output_auto_encoding' => true, //出力を自動変更(KtaiHelperの中で)
             );


3. Viewファイルを編集
viewファイルはコントローラ側で設定した、下記のようになります。
レイアウトファイル: views/layout/mobile.ctp
各viewファイル: views/hoge_mobile/*.ctp

レイアウトファイル、各viewファイルはUTF-8で保存します。ただし、レイアウトファイルの中で、charsetをSJISに変更します。

<head>
    <?php echo $html->charset('Shift_JIS'); ?>
</head>


基本的にはこれでOKです。これだけでこのコントローラはモバイル対応になりました。セッションはURLの中に自動で付与され、Viewの文字コードSJISになります。

最後に、POSTされるデータはSJISで来るので、php.iniで自動変換をかけるか、beforeFilterで$this->dataをコンバートする必要があります。
各コントローラのbeforeFilterで下記のようにすればOK.複数コントローラで使う場合はコンポーネント化したほうが良いです。

function beforeFilter() {
  if(!empty($this->data)) {
    mb_convert_variables( 'UTF-8', 'SJIS-win' ,$this->data);
  }
  parent::beforeFilter();
}

beforeFilterで自前でやる場合は、昔書いた記事の最後にあるので参考にしてください。
http://d.hatena.ne.jp/cakephper/20081001/1222866102

追記
core.phpでdebug値を0にしておかないと、セッションIDの自動付与は動かないっぽいので注意が必要です。