zz log

zaininnari 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-8SJIS、等)

  • 機種情報(解像度などを調査)

  • 高解像度携帯向けに画像を引き延ばし

  • 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;
    	}