<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>

<title>Code Igniter User Guide</title>

<style type='text/css' media='all'>@import url('../userguide.css');</style>
<link rel='stylesheet' type='text/css' media='all' href='../userguide.css' />

<script type="text/javascript" src="../nav/nav.js"></script>
<script type="text/javascript" src="../nav/prototype.lite.js"></script>
<script type="text/javascript" src="../nav/moo.fx.js"></script>
<script type="text/javascript">
window.onload = function() {
	myHeight = new fx.Height('nav', {duration: 400}); 
	myHeight.hide();
}
</script>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv='expires' content='-1' />
<meta http-equiv= 'pragma' content='no-cache' />
<meta name='robots' content='all' />
<meta name='author' content='Rick Ellis' />
<meta name='description' content='Code Igniter User Guide' />

</head>
<body>

<!-- START NAVIGATION -->
<div id="nav"><div id="nav_inner"><script type="text/javascript">create_menu('../');</script></div></div>
<div id="nav2"><a name="top"></a><a href="javascript:void(0);" onclick="myHeight.toggle();"><img src="../images/nav_toggle.jpg" width="153" height="44" border="0" title="Toggle Table of Contents" alt="Toggle Table of Contents" /></a></div>
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
<td><h1>Code Igniter User Guide Version 1.5.0b1</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Full Table of Contents</a></td>
</tr>
</table>
</div>
<!-- END NAVIGATION -->


<!-- START BREADCRUMB -->
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
<td id="breadcrumb">
<a href="http://www.codeigniter.com/">Code Igniter Home</a> &nbsp;&#8250;&nbsp;
<a href="../index.html">User Guide Home</a> &nbsp;&#8250;&nbsp;
User Agent Class
</td>
<td id="searchbox"><form method="get" action="http://www.google.com/search"><input type="hidden" name="as_sitesearch" id="as_sitesearch" value="www.codeigniter.com/user_guide/" />Search User Guide&nbsp; <input type="text" class="input" style="width:200px;" name="q" id="q" size="31" maxlength="255" value="" />&nbsp;<input type="submit" class="submit" name="sa" value="Go" /></form></td>
</tr>
</table>
<!-- END BREADCRUMB -->

<br clear="all" />


<!-- START CONTENT -->
<div id="content">


<h1>User Agent Class</h1>

<p>The User Agent Class provides functions that help identify information about the browser, mobile device, or robot visiting your site.
In addition you can get referrer information as well as language and supported character-set information.</p>

<h2>Initializing the Class</h2>

<p>Like most other classes in Code Igniter, the User Agent class is initialized in your controller using the <dfn>$this->load->library</dfn> function:</p>

<code>$this->load->library('user_agent');</code>
<p>Once loaded, the object will be available using: <dfn>$this->agent</dfn></p>

<h2>User Agent Definitions</h2>

<p>The user agent name definitions are located in a config file located at: <dfn>application/config/user_agents.php</dfn>.  You may add items to the
various user agent arrays if needed.</p>

<h2>Example</h2>

<p>When the User Agent class is initialized it will attempt to determine whether the user agent browsing your site is
a web browser, a mobile device, or a robot.  It will also gather the platform information if it is available.


<code>
$this->load->library('user_agent');<br />
<br />
if ($this->agent->is_browser())<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;$agent  = $this->agent->browser().' '.$this->agent->version();<br />
}<br />
elseif ($this->agent->is_robot())<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;$agent = $this->agent->robot();<br />
}<br />
elseif ($this->agent->is_mobile())<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;$agent = $this->agent->mobile();<br />
}<br />
else<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;$agent = 'Unidentified User Agent';<br />
}<br />
<br />
echo $agent;<br />
<br />
echo $this->agent->platform(); // Platform info (Windows, Linux, Mac, etc.)
</code>




<br />
<h1>Function Reference</h1>


<h2>$this->agent->is_browser()</h2>
<p>Returns TRUE/FALSE (boolean) if the user agent is a known web browser.</p>

<h2>$this->agent->is_mobile()</h2>
<p>Returns TRUE/FALSE (boolean) if the user agent is a known mobile device.</p>

<h2>$this->agent->is_robot()</h2>
<p>Returns TRUE/FALSE (boolean) if the user agent is a known robot.</p>

<p class="important"><strong>Note:</strong>&nbsp; The user agent library only contains the most common robot
definitions.  It is not a complete list of bots. There are hundreds of them so searching for each one would not be 
very efficient. If you find that some bots that commonly visit your site are missing from the list you can add them to your
<dfn>application/config/user_agents.php</dfn> file.</p>

<h2>$this->agent->is_referral()</h2>
<p>Returns TRUE/FALSE (boolean) if the user agent was referred from another site.</p>


<h2>$this->agent->browser()</h2>
<p>Returns a string containing the name of the web browser viewing your site.</p>

<h2>$this->agent->version()</h2>
<p>Returns a string containing the version number of the web browser viewing your site.</p>

<h2>$this->agent->mobile()</h2>
<p>Returns a string containing the name of the mobile device viewing your site.</p>

<h2>$this->agent->robot()</h2>
<p>Returns a string containing the name of the robot viewing your site.</p>

<h2>$this->agent->platform()</h2>
<p>Returns a string containing the platform viewing your site (Linux, Windows, OS X, etc.).</p>

<h2>$this->agent->referrer()</h2>
<p>The referrer, if the user agent was referred from another site. Typically you'll test for this as follows:</p>

<code> if ($this->agent->is_referral())<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo $this->agent->referrer();<br />
}</code>


<h2>$this->agent->agent_string()</h2>
<p>Returns a string containing the full user agent string.  Typically it will be something like this:</p>

<code>Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.0.4) Gecko/20060613 Camino/1.0.2</code>


<h2>$this->agent->accept_lang()</h2>
<p>Lets you determine if the user agent accepts a particular language. Example:</p>

<code>if ($this->agent->accept_lang('en'))<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo 'You accept English!';<br />
}</cod>

<p class="important"><strong>Note:</strong> This function is not typically very reliable
since some browsers do not provide language info, and even among those that do, it is not always accurate. </p>



<h2>$this->agent->accept_charset()</h2>
<p>Lets you determine if the user agent accepts a particular language. Example:</p>

<code>if ($this->agent->accept_charset('utf-8'))<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo 'You browser supports UTF-8!';<br />
}</cod>

<p class="important"><strong>Note:</strong> This function is not typically very reliable
since some browsers do not provide character-set info, and even among those that do, it is not always accurate. </p>



</div>
<!-- END CONTENT -->


<div id="footer">
<p>
Previous Topic:&nbsp;&nbsp;<a href="uri.html">URI Class</a>
&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="#top">Top of Page</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="../index.html">User Guide Home</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
Next Topic:&nbsp;&nbsp;<a href="validation.html">Validation Class</a>
<p>
<p><a href="http://www.codeigniter.com">Code Igniter</a> &nbsp;&middot;&nbsp; Copyright &#169; 2006 &nbsp;&middot;&nbsp; <a href="http://www.pmachine.com">pMachine, Inc.</a></p>
</div>

</body>
</html>