FuelPHPのAgentクラスと拡張
FuelPHPのAgentクラスは、下記URLからブラウザ情報を取得し、これを元にプラットフォーム等の判定を行っています。
http://browsers.garykeith.com/stream.asp?Lite_PHP_BrowsCapINI
上記URLへアクセスは最初に1度のみで、それ以降はキャッシュとして保持されます。
(アクセス先URL、ファイル保存先はhttp://docs.fuelphp.com/classes/agent/config.html:設定ファイルで変更可能)
これを元に判定されたユーザーエージェント情報は、以下の関数で取得する事になります。(諸々の使い方は公式ドキュメント参照)
accepts_charset($charset = 'utf-8')
指定charsetがHTTP_ACCEPT_CHARSETに含まれるか
accepts_language($language = 'en')
指定languageがHTTP_ACCEPT_LANGUAGEに含まれるか
platform()
プラットフォーム(Win95,Win98,WinNT...)
version()
ブラウザのバージョン
charsets()
HTTP_ACCEPT_CHARSET一覧
languages()
HTTP_ACCEPT_LANGUAGE一覧
properties()
プロパティ一覧
property($property = null)
指定プロパティの値
is_mobiledevice()
モバイル判定(スマホ含む)
is_robot()
ロボット判定
上記の関数を見てもらうと分かりますが、現状ではスマホの判定を行う関数がないようですので、Agentクラスを拡張し、スマホ判定の関数を追加してみたいと思います。
まずは『fuel/app/classes/agent.php』を用意します。
<?php class Agent extends Fuel\Core\Agent { public static function _init() { parent::_init(); $sp_list = array( 'iPhone', 'iPod', 'Android', 'IEMobile', 'dream', 'CUPCAKE', 'blackberry9500', 'blackberry9530', 'blackberry9520', 'blackberry9550', 'blackberry9800', 'webOS', 'incognito', 'webmate' ); $pattern = '/'.implode('|', $sp_list).'/i'; static::$properties['x_issmartphone'] = preg_match($pattern, static::$user_agent) ? true : false; } public static function is_smartphone() { return static::$properties['x_issmartphone']; } }
次に『fuel/app/bootstrap.php』に対し、Agentを追加します。
Autoloader::add_classes(array( // Add classes you want to override here // Example: 'View' => APPPATH.'classes/view.php', 'Agent' => APPPATH.'classes/agent.php' ));
上記の設定が完了すれば、以下の呼び出しが可能になります。
if (Agent::is_smartphone()) { // スマホ用処理 }