読者です 読者をやめる 読者になる 読者になる
一人もくもく会 α verでサービス開始しました。

携帯によって表示を変える

CakePHP

まず、cakeのライブラリの中にある
app_controller.php
appフォルダにコピーします。

次にrender関数をオーバーライドするため
以下の内容を書き込みます。

function render( $action = null, $layout = null, $file = null )
{
	if( !empty( $_SERVER["HTTP_USER_AGENT"] ) )
	{
		$ua	= $_SERVER["HTTP_USER_AGENT"];
		if( strpos( $ua, "DoCoMo" ) !== FALSE ){
			$action	= "i_" . ( $action ? $action : $this->action );
			$layout	= "i_" . $this->layout;
		}else if( strpos( $ua, "UP.Browser" ) !== FALSE ){
			$action = "a_" . ( $action ? $action : $this->action );
			$layout	= "a_" . $this->layout;
		}else if(
			strpos( $ua, "SoftBank" ) !== FALSE ||
			strpos( $ua, "Vodafone" ) !== FALSE ||
			strpos( $ua, "J-PHONE" ) !== FALSE ){
			$action = "j_" . ( $action ? $action : $this->action );
			$layout	= "j_" . $this->layout;
		}
	}
	return parent::render( $action, $layout, $file );
}

このようにして携帯端末チェックを行うと、
個別のコントローラーは全くいじることなく、
携帯用にビューテンプレートを用意しておけば
自動的にそれが表示されます。

たとえば上記の例では、
/test/view
が表示された時、
PCではview.thtmlが使用されますが、
iモードだとi_view.thtml、
auだとa_view.thtml
が自動的に選択されて表示されます。