Archive for 2010年3月2日
携帯表示その1 Yii Framework触るぜ日記(5)
3月 2nd
ナウなヤングは携帯だって!
PCみたいなモン起動させてる間に携帯でいけますから!
ってか俺、携帯サイトばっかり触ってる人ですもんね。
javascriptで遊びたいよ、ママン(><)
そんなワケで携帯対応してみる。
とりいそぎ表示テンプレートを分ける程度の簡易対応です。
最初はCThemeとかCThemeManagerとか触るハメになるかと思ったけどそこまでしなくても大丈夫みたいです。
とはいえこれで正解か微妙ですが…。
やりたい事は、
- viewファイルを携帯なら携帯用のviewファイルを使いたい
- ディレクトリで携帯をわけるのヤダ(面倒)
- docomo_index.phpとかau_index.phpみたくしたい
- 3キャリア共通ならmobile_index.php使う
まぁ、よくあるっぽい感じにしたいんです。
実装はズバリ、application.components.Controllerに関数追加しました。
$breadcrumbsのメンバ変数を追加してるだけのヤツです。
いいよね?componentsに入ってるんだし。
resolveViewFile()をさわらないとファイル名での変更が厳しそうだったのでどうしてもControllerでやる必要があったんです。よ。
でも絵文字対応とかもあるんでちゃんと分離できればベストだなー。
やってるのは、コンストラクタでキャリア判別してファイル読み込み時にキャリアによって各ファイルをチェックする。
そんな流れ。
class Controller extends CController
{
/**
* @var array the breadcrumbs of the current page. The value of this property will
* be assigned to {@link CBreadcrumbs::links}. Please refer to {@link CBreadcrumbs::links}
* for more details on how to specify this property.
*/
public $breadcrumbs=array();
//以下、携帯対応
const FLG_MOBILE_DOCOMO = 'docomo';
const FLG_MOBILE_AU = 'au';
const FLG_MOBILE_SOFTBANK = 'softbank';
private $carrier = NULL;
public function __construct( $id, $module=null )
{
//キャリア判定
//面倒なんで未実装。
//pearのNet_UserAgent_Mobileとか使えばいいと思うよ。
$this->carrier = 'au';
//CControllerのコンストラクタ呼んであげる。
parent::__construct( $id, $module );
}
public function getCarrier()
{
return $this->carrier;
}
public function isMobile()
{
if( $this->carrier ){ return(true); }
else{ return(false); }
}
//携帯用viewファイル対応
public function resolveViewFile($viewName,$viewPath,$basePath)
{
$filename = parent::resolveViewFile($viewName,$viewPath,$basePath);
if( $this->isMobile() ){
$viewPath = dirname($filename).DIRECTORY_SEPARATOR;
$viewName = basename($filename);
switch( $this->getCarrier() )
{
case self::FLG_MOBILE_DOCOMO:
$tmpName = $viewPath.'docomo_'.$viewName;
break;
case self::FLG_MOBILE_AU:
$tmpName = $viewPath.'au_'.$viewName;
break;
case self::FLG_MOBILE_SOFTBANK:
$tmpName = $viewPath.'softbank_'.$viewName;
break;
}
if( is_file($tmpName) ){ return($tmpName); }
if( is_file($viewPath.'mobile_'.$viewName) ){ return($viewPath.'mobile_'.$viewName); }
}
return $filename;
}
}
キャリア判定つける前に力つきました。
もぅ帰る。
キャリア判定の他に絵文字の対応とかもいると思うけど、、
それはまた今度!