CakePHPの簡単なサンプルです。
PCからの接続するとPCサイト用のHTMLを表示し、携帯から接続すると携帯サイト用のHTMLを表示するサンプルです。
出力するHTMLの文字コードは、utf-8のみとします。
Index
環境
CakePHPのバージョン1.2.1.8004を使用します。
僕の環境のPHPのバージョンは 5.2.3です。
携帯端末から接続かどうかの判別にPEARのNet_UserAgent_Mobileを使用します。
バージョンは1.0.0RC1です。
apacheのhttpd.confで、ドキュメントルートディレクトリに次のような設定を書きました。
<Directory "appディレクトリ/webroot">
Options FollowSymLinks -Indexes
AllowOverride All
Order allow,deny
Allow from all
php_value default_charset UTF-8
php_value mbstring.language Japanese
php_value mbstring.internal_encoding UTF-8
php_flag mbstring.encoding_translation OFF
php_value mbstring.http_input auto
php_value mbstring.http_output pass
</Directory>
主にシミュレータで、サイトに接続して、表示を確認します。
使用したシミュレーターは、次表のものです。
| DoCoMo | iモードHTMLシミュレータⅡ |
|---|---|
| au | Openwave SDK 6.2 |
| softbank | ウェブコンテンツビューアー 6.0.1.146 |
一応、DoCoMoとsoftbankの実機で表示されることを確認しています。
auの実機では、未確認です。
準備
WWW_ROOTにある.htaccessなどでPEARライブラリへのパスを通しておきます。
例(.htaccess)
php_value include_path ".:/php/includes:VENDORS/PEAR"
端末(USER_AGENT)の判定
端末の判定は、app/config/bootstrap.phpの中で行うことにします。
app/config/bootstrap.php 抜粋
PHP:
get_carrier関数内で、PEAR::Net_UserAgent_Mobileを使って、端末の判定をしています。
app/config/common_func.php get_carrier関数
PHP:
-
function get_carrier(&$is_mobile,&$serial_number,&$carrier_short_name)
-
{
-
include_once('Net/UserAgent/Mobile.php');
-
-
$http_ua = $_SERVER['HTTP_USER_AGENT'];
-
-
$agent = Net_UserAgent_Mobile::factory();
-
$model = $agent->getModel();
-
-
$is_mobile = false;
-
$serial_number = null;
-
$carrier_short_name = null;
-
$carrier = null;
-
-
if ($agent->isDoCoMo()) {
-
$carrier = UAGENT_DOCOMO;
-
$serial_number = $agent->getSerialNumber();
-
$carrier_short_name = $agent->getCarrierShortName();
-
$is_mobile = true;
-
}
-
else if ($agent->isSoftBank()) {
-
$carrier = UAGENT_SB;
-
$serial_number = $agent->getSerialNumber();
-
$carrier_short_name = $agent->getCarrierShortName();
-
$is_mobile = true;
-
}
-
else if ($agent->isEZweb()) {
-
$carrier = UAGENT_AU;
-
$serial_number = $_SERVER['HTTP_X_UP_SUBNO'];
-
}
-
$carrier_short_name = $agent->getCarrierShortName();
-
$is_mobile = true;
-
}
-
else {
-
$carrier = UAGENT_PC;
-
}
-
return $carrier;
-
}
次回、コントローラーとビューのサンプルコードを投稿予定です。
追記 2009/02/05投稿しました。
CakePHPで携帯サイトを作る - HTML出力振り分け(2)
[...] 【Cake php】 このレベルまでたどり着けません。 CakePHPで携帯サイトを作る - HTML出力振り分け(1) « trekdevel [...]