fc2ブログ

price-change:blog

色んな情報テンコモリ

CodeIgniter | PCとモバイルのview切り替え

同じURLでPC用のviewとモバイル用viewをユーザーエージェントで切り替えられたらいいなー、と思って今回も頑張ってみた。

ユーザーエージェントを判別するためにPEAR::Net_UserAgent_Mobileを使う手もあるけど、ここはあえてCodeIgniteruser_agentライブラリを使ってやってみるのだ。

まずは、application/config/user_agents.php 内で $mobiles 配列にユーザーエージェントを定義しなくてはなんねだ。どう定義したらいいかよく分からなねから、ライブラリを覗いてみたら、どうやら配列のキーで判別しているようだわさ。配列のキーは小文字にしなきゃいけねだよ。んで、値にユーザーエージェント名を書くだ。古い機種のは面倒臭いから現行のに統一しただ。au は ezweb の方がいいだべか?


'docomo'     => 'DoCoMo',
'vodafone'   => 'SoftBank',
'j-phone'    => 'SoftBank',
'softbank'   => 'SoftBank',
'kddi-'      => 'au',
'up.browser' => 'au',
'willcom'    => 'WILLCOM',
'ddipocket'  => 'WILLCOM'

んで、コントローラを書いてみただ。_outputメソッドで携帯用に文字コードをSJISに変換してるけど、これはフックしたほうがいいら?わからんわぁ。


<?php

class SwitchView extends Controller
{
	function index()
	{
		$data = array();
		$data['message'] = 'こんちくわ!';

		$this->load->helper('url');
		$this->load->library('user_agent');

		if ($this->agent->is_mobile())
		{
			$this->load->view('switch_view/mobile', $data);
		}
		else
		{
			$this->load->view('switch_view/pc', $data);
		}
	}

	function _output($output)
	{
		if ($this->agent->is_mobile())
		{
			$output = mb_convert_encoding($output, 'SJIS', $this->config->item('charset'));
			header('Content-Type: text/html; charset=shift-jis;');
		}
		
		echo $output;
	}
}

?>

んで、PC用View


<html>
<head>
<link rel="stylesheet" type="text/css" href="<?=site_url()?>css/contact.css" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>CodeIgniter で表示切り替え</title>
</head>
<body>
<h1>PC版</h1>
<?=$message?>
</body>
</html>

そいで、モバイル用View文字コードは UTF-8。Shift_JIS で書いたり、meta にshift_jis を指定したりすると文字化けする。


<html>
<head>
<title>CodeIgniter で表示切り替え</title>
</head>
<body>
<h1>モバイル版</h1>
<?=$message?>
</body>
</html>

実行結果が見たい方は、Firefoxの拡張機能 User Agent Switcherなんかを使って、ユーザーエージェントで View 切り替えページにれっつアクセス!

スポンサーサイト



テーマ:PHP - ジャンル:コンピュータ

トラックバック

トラックバックURLはこちら
http://pricewave.blog110.fc2.com/tb.php/18-d9a33389
この記事にトラックバックする(FC2ブログユーザー)