同じURLでPC用のviewとモバイル用viewをユーザーエージェントで切り替えられたらいいなー、と思って今回も頑張ってみた。
ユーザーエージェントを判別するためにPEAR::Net_UserAgent_Mobileを使う手もあるけど、ここはあえてCodeIgniter の user_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 切り替えページにれっつアクセス!