CakePHP+Ktai Libraryを使用しているサイトで、アクセス元の端末を判別してCakePHPのViewを切り替える方法。
キャリア判別はしてないけど、この方法なら簡単に実装できるはず。
前準備
Viewのフォルダは以下の2つに分けます。
- app/views
- PCからアクセスした場合に参照するView
- app/views_mobile
- 携帯からアクセスした場合に参照するView
実作業
- http://blog.ecworks.jp/ktaiから、モジュール本体(ktai-X.X.X.zip)をダウンロード。
- http://start.typepad.jp/typecast/から、TypePad絵文字(emoticon.zip)をダウンロード。
- ktai-X.X.X.zipを解凍。まあ中身の通り、そのまま配置。
ちなみにヘルパの配置は、app/views の方へ。 - emoticon.zipを解凍。webroot/img/emoticon/ の中に画像を配置。
- app/controllers/app_controller.php に記述。
<?php class AppController extends Controller { var $components = array("Ktai"); var $helpers = array("Ktai"); var $ktai = array( "convert_output" => true, "use_img_emoji" => true, "input_encoding" => "UTF8", "output_encoding" => "SJIS", "img_emoji_url" => "/appname/img/emoicons/", ); } ?>
今回行った$ktaiの設定内容は以下の通り。
- use_img_emoji
- 絵文字をTypePad絵文字で出力します。デフォルトはfalse。
PCのみで開発テストしてる場合は、画像で出力してくれた方が判りやすい。
これを指定しなくても、携帯からアクセスした場合はちゃんと絵文字が出力されます。 - input_encoding / output_encoding
- 入力文字コードと出力文字コード。デフォルトはどちらもUTF-8。
ViewファイルをUTF-8で記述し、出力はシフトJISにしたかったので指定してます。
変更の必要がなければ、何もしなくてもいいかも。 - img_emoji_url
- TypePad絵文字のバス。デフォルトのパスは"/img/emoicons/"。
- これだけだと文字コードの変換が行われないので、更にapp_controller.phpへ追記。
<?php class AppController extends Controller { ... (上の記述) ... function afterFilter() { if ($this->Ktai->is_ktai() == true) { parent::afterFilter(); $this->output = mb_convert_kana($this->output, "rak"); $this->output = mb_convert_encoding($this->output,"sjis-win","utf-8"); $this->Ktai->convert_emoji($this->output,$this->Ktai->get_carrier()); } } ?>
これで、
という動きになります。
- 最後に、PC/携帯電話でViewを切り替える設定。
app/controllers/app_controller.phpへ更に追記。<?php class AppController extends Controller { ... (上の記述) ... function beforeRender() { parent::beforeRender(); $config = Configure::getInstance(); if ($this->Ktai->is_ktai() == true) { array_unshift($config->viewPaths, ROOT.DS.APP_DIR.DS."views_mobile".DS); } } ?>
これで、
- PCだったら通常のView(app/views)
- 携帯だったら携帯用のView(app/views_mobile)
を使用するようになります。
ここで使用している is_ktai() をキャリア判別用の関数へ変更すれば、キャリア毎のView切替もできるはず。