環境
- cake_1.2.3.8166
- ECWorks Blog | Ktai Library for CakePHP1.2(Ver 0.2.0RC1)
Ktai Libraryの魅力
携帯サイト作成時には、
どうしても携帯端末の振り分けが必要になり、
PEARのNet_UserAgent_Mobileのお世話になっていました。
PEARのNet_UserAgent_Mobileでは、
ユーザーエージェントやヘッダーにより、
携帯端末の振り分けに必要なものが提供されていましたが、
画像の縮小や絵文字については、独自に設定する必要がありました。
Ktai Libraryでは、
Net_UserAgent_Mobile+アルファ(画像への対応、絵文字など)の環境が整備されている点に惹かれます。
例えば、下記の様な機能が現在提供されています。
ECWorks Blog | Ktai Library for CakePHP1.2より引用:
XMLタグ対応 [New!]
URL処理を追加(コールバックによる付け替え可能) [New!]
セッション対応
セッション時のリダイレクト対応
QRコード作成
携帯からuidを入手
自動変換処理関連でかな変換オプションを追加
UTF-8対応
文字コード変換(UTF-8→SJIS、等)
機種情報(解像度などを調査)
高解像度携帯向けに画像を引き延ばし
mailtoリンク作成の支援機能(件名や本文の挿入)
PHS(一部)対応
キャリア判別(携帯/非携帯の判別・各キャリア判別)
メールアドレスからキャリア判別
絵文字の呼び出し(各キャリアに適した絵文字フォーマットを生成)
ページを丸ごと絵文字変換
絵文字の出力をバイナリコードか数値表現かを選択可能
accesskey付きリンクの作成(絵文字の自動挿入)[ヘルパー利用のみ]
PC等でTypePadで使用されている絵文字画像の表示サポート
Ktai Library for CakePHP1.2(Ver 0.2.0RC1)のインストール
Ktai Library for CakePHP1.2に関する設定は、同封のreadmeを参照
1.cakephpを展開
[WWW_ROOT/index.php]
define('APP_DIR', 'app_ktai-0.2.0');
appフォルダでもOKだけど、
個人的に別にしたかったための設定。
2.Ktai Library for CakePHP1.2(Ver 0.2.0RC1)をcakephpにそのまま上書き
(Ktai Library用のファイルしか含まれていないため、
コンポーネントやヘルパーのファイル名が運悪く衝突しない限り大丈夫)
●必要な設定1
[app/config/routes.php]
//一番上に記述する
Router::connectNamed(array(), array('argSeparator' => '~'));
//↓以下、Router::connect(〜)を記述します
●必要な設定2
「app/controllers/app_controller.php.ktai」のリネーム。
もしも、app_controller.phpに独自の設定を加えている場合、app_controller.php.ktai内のredirect関数をコピーして貼り付け。
[app/controllers/app_controller.php]
redirect関数のオーバーライド
i-modeによるアクセス、または、「use_redirect_session_id」 が 「true」の場合に
セッションIDをURLに付加
//---------------------------------------------------------- //Redirect override. //If iMODE access or use_redirect_session_id is true, // adding session id to url param. //---------------------------------------------------------- function redirect($url, $status = null, $exit = true){ if(isset($this->Ktai)){ if($this->Ktai->_options['enable_ktai_session'] && ($this->Ktai->_options['use_redirect_session_id'] || $this->Ktai->is_imode())){ $url = Router::parse($url); if(!isset($url['?'])){ $url['?'] = array(); } $url['?'][session_name()] = session_id(); $url = Router::url($url); } } return parent::redirect($url, $status, $exit); }
サンプルコード
[app/controllers/posts_controller.php]
<?php class PostsController extends AppController { var $name = 'Posts'; //cakephpのおまじない var $components = array('Ktai'); //コンポーネントの登録 [app/controllers/components/ktai.php] var $helper = array('Ktai'); //ヘルパーの登録 [app/views/helpers/ktai.php] //オプション、以下はすべてデフォルト値。なくてもOK //beforeRenderからヘルパーにもが使われる var $ktai = array( 'imode_session_name' => 'csid', //iMODE時のセッション名を変更します(デフォルト:csid) 'session_save' => 'php', //セッションの保存方法(デフォルト:php) //[app/config/core.php]のConfigure::write('Session.save', 'php');を上書き 'input_encoding' => KTAI_ENCODING_SJISWIN, //Encoding params 'output_encoding' => KTAI_ENCODING_SJISWIN, 'use_binary_emoji' => true, 'use_img_emoji' => false, //Emoji image params 'img_emoji_url' => './img/emoticons/', //絵文字タグを使用する際の絵文字画像へのパスを設定(デフォルト:/img/emoticons/) 'img_emoji_ext' => 'gif', 'img_emoji_size' => array(16, 16), 'iphone_user_agent_belongs_to_ktai' => false, //iPhone params 'iphone_user_agent_belongs_to_softbank' => false, 'iphone_email_belongs_to_ktai_email' => false, 'iphone_email_belongs_to_softbank_email' => false, 'default_screen_size' => array(240, 320), //Virtual screen params 'enable_ktai_session' => true, //セッション使用を有効にします(デフォルト:true) 'use_redirect_session_id' => false, //リダイレクトに必ずセッションIDをつけます(デフォルト:false) 'use_xml' => false, //XML params ); function index() { //Ktai libraryのバージョンを返す $this->Ktai->get_version(); //string 0.2.0RC1 //携帯キャリアを数字で返す。 //define('KTAI_CARRIER_UNKNOWN', 0); //define('KTAI_CARRIER_DOCOMO', 1); //define('KTAI_CARRIER_KDDI', 2); //define('KTAI_CARRIER_SOFTBANK', 3); //define('KTAI_CARRIER_EMOBILE', 4); //define('KTAI_CARRIER_IPHONE', 5); //define('KTAI_CARRIER_PHS', 6); $this->Ktai->get_carrier($user_agent = null, $refresh = false); //integer //iモード端末かチェックする $this->Ktai->is_imode(); //boolen //ソフトバンクかチェックする //iphoneはデフォルト含まず iphone_user_agent_belongs_to_softbank $this->Ktai->is_softbank(); //boolen //vodafone端末かチェックする $this->Ktai->is_vodafone(); //boolen //jphone端末かチェックする $this->Ktai->is_jphone(); //boolen //ezweb端末かチェックする $this->Ktai->is_ezweb(); //boolen //emobile端末かチェックする $this->Ktai->is_emobile(); //boolen //iphone端末かチェックする $this->Ktai->is_iphone(); //boolen //携帯端末かチェックする //iモード、ソフトバンク、ezweb、emobileを携帯端末とする //iphoneはデフォルト含まず iphone_user_agent_belongs_to_ktai $this->Ktai->is_ktai(); //boolen //PHS端末かチェックする $this->Ktai->is_phs(); //boolen //ドコモのメールアドレスかチェックする $this->Ktai->is_imode_email($email); //boolen //ソフトバンクのメールアドレスかチェックする //iphoneはデフォルト含まず iphone_email_belongs_to_softbank_email $this->Ktai->is_softbank_email($email); //boolen //iphoneのメールアドレスかチェックする $this->Ktai->is_iphone_email($email); //boolen //vodafoneのメールアドレスかチェックする $this->Ktai->is_vodafone_email($email); //boolen //jphoneのメールアドレスかチェックする $this->Ktai->is_jphone_email($email); //boolen //ezwebのメールアドレスかチェックする $this->Ktai->is_ezweb_email($email); //boolen //emobileのメールアドレスかチェックする $this->Ktai->is_emobile_email($email); //boolen //携帯端末のメールアドレスかチェックする //iモード、ソフトバンク、ezweb、emobileを含める //iphoneはデフォルト含まず iphone_email_belongs_to_ktai_email $this->Ktai->is_ktai_email($email); //boolen //PHSのメールアドレスかチェックする $this->Ktai->is_phs_email($email); //boolen //iモード絵文字を他キャリア用に変換する $this->Ktai->convert_emoji(&$str, $carrier = null, $input_encoding = null, $output_encoding = null, $binary = null); //string //絵文字コードを変換する $this->Ktai->emoji($code, $disp = true, $carrier = null, $input_encoding = null, $output_encoding = null, $binary = null); //string //User Agentから、 //テキスト文字表示数、スクリーンサイズ //画像サイズ、画像フォーマットの対応(gif / jpg / png) //を取得 $this->Ktai->get_machineinfo($carrier = null, $name = null); //array //端末IDを取得する //iモード、ソフトバンク、ezweb、emobile対応 $this->Ktai->get_uid(); //string } } ?>
気になったところ
[vendors/ecw/lib3gk.php]
get_carrierの後半部分、
return $this->_carrier;
より下の部分は、過去遺産?
//------------------------------------------------ //Get carrier code //------------------------------------------------ function get_carrier($user_agent = null, $refresh = false){ if($this->_carrier === null || $user_agent !== null || $refresh){ $arr = $this->analyze_user_agent($user_agent); if($this->_carrier === null || $refresh){ $this->_carrier = $arr['carrier']; $this->_carrier_name = $arr['carrier_name']; $this->_machine_name = $arr['machine_name']; } return $arr['carrier']; } return $this->_carrier; if($this->is_imode()){ $code = KTAI_CARRIER_DOCOMO; }else if($this->is_ezweb()){ $code = KTAI_CARRIER_KDDI; }else if($this->is_softbank()){ $code = KTAI_CARRIER_SOFTBANK; }else if($this->is_emobile()){ $code = KTAI_CARRIER_EMOBILE; }else if($this->is_iphone()){ $code = KTAI_CARRIER_IPHONE; }else if($this->is_phs()){ $code = KTAI_CARRIER_PHS; }else{ $code = KTAI_CARRIER_UNKNOWN; } return $code; }