A Google Analytics Component for Yii. See our Wiki for more information. Below will give you an overview of how to install and use the basics of this extension. Looking for Universal Analytics? See our latest addition over at yii-analytics-ua.
The first step is straightforward; simply unzip the files from the latest downloads
into your extensions folder. You should now be able to navigate to protected/extensions/TPGoogleAnalytics/components/
and see a file called TPGoogleAnalytics.php
You can also install this as a Git submodule. This can be done with running the following
command in the root of your project, where the path to the extensions folder (protected/extensions
) might need updating.
git submodule add git://github.com/TagPlanet/yii-analytics-ga.git protected/extensions/TPGoogleAnalytics
By using a submodule, this will guarantee you'll have access to the latest version at all times.
Within your configuration files (usually found under /protected/config/
) there is the "components" section. Just like your db and cache
components, we'll need to add in our own configuration for this. Add in the following code within the components section:
'googleAnalytics' => array(
'class' =>'ext.TPGoogleAnalytics.components.TPGoogleAnalytics',
'account' => 'UA-########-#',
),
In order for the Google Analytics component to automatically render the code in the header, you must have the following two items configured:
- Configuration file - within the googleAnalytics configuration, you must include:
'googleAnalytics' => array(
'class' =>'ext.TPGoogleAnalytics.components.TPGoogleAnalytics',
'account' => 'UA-########-#',
'autoRender' => true,
),
- Controllers - your controllers must have the following code:
protected function beforeRender($view)
{
$return = parent::beforeRender($view);
Yii::app()->googleAnalytics->render();
return $return;
}
You can place this either within protected/components/Controller.php
(or whichever Controller you are overloading) or within
every single one of your controllers. In the event that you already have the method beforeRender
within your controllers, simple
add in the following line to it, before the return statement:
Yii::app()->googleAnalytics->render();
This component allows for some flexibility within the configuration section. Below are all of the allowed configuration variables:
- class - The TPGoogleAnalytics class location
- Required: yes
- Type: string
- Default:
ext.TPGoogleAnalytics.components.TPGoogleAnalytics
- account - Your Google Analytics account ID
- Required: yes
- Type: string
- Format:
UA-########-#
- Default: (none)
- autoRender - Automatically render the Google Analytics code in the head. If you do set this to true, you will need to update your controller's
beforeRender
method (see:Optionally adding in auto-render code)- Required: no
- Type: boolean
- Recommend Setting: true
- Default: false
- autoPageview - Automatically add
_trackPageview
to the code. By disabling this, you will need to callYii::app()->googleAnalytics->_trackPageview();
for each view you want to track. Even when this is enabled, you can still call_trackPageview
with a specified page name and it will not call_trackPageview
twice.- Required: no
- Type: boolean
- Recommend Setting: true
- Default: true
- debug - Changes Google's JS to their ga_debug.js file and includes Yii debugging
- Required: no
- Type: boolean
- Recommend Setting: false (in production, true in development)
- Default: false
- includeFile - Enable to include the call to Google Analytics file. When using multiple trackers on one page, you should disable this for all but one instance.
- Required: no
- Type: boolean
- Recommend Setting: true
- Default: true
- prefix - Allow for multiple instances of Google Analytics on the page via namespacing in the JavaScript. See Google's Docs for more information.
- Required: no
- Type: string
- Recommend Setting: ''
- Default: ''
Since the Google Analytics extension is setup as a component, you can simply use the following call to access the extension:
Yii::app()->googleAnalytics
In Google Analytics, you call various methods to change the settings and values that are passed to Google's severs. For the Yii extension, you use a similar setup. All you need to do is call the name of the method, and pass in the parameters (not as an array!)
A normal call to set a custom variable in JavaScript:
_gaq.push(['_setCustomVar', 1, 'Section', 'Life & Style', 3]);
Within a controller or view, you can do the same as above via the extension:
Yii::app()->googleAnalytics->_setCustomVar(1, 'Section', 'Life & Style', 3);
Sometimes you need to push quite a bit of data into Google Analytics. With this extension, that is fairly easy.
For an example, let's push in a transaction when the user completes a checkout via the checkout
action within the
cart
controller. You can see within this example that Yii's relational records can be used (see: $order->Store->Name
)
protected/controllers/cart.php
:
<?php
// ...
protected function beforeRender($view)
{
$return = parent::beforeRender($view);
Yii::app()->googleAnalytics->render();
return $return;
}
public function actionCheckout( )
{
// Do some processing here (let's say $order has information about the order)
if($order->isComplete)
{
// Start the transaction using $order's information
Yii::app()->googleAnalytics->_addTrans(
$order->OrderID,
$order->Store->Name,
$order->Total,
$order->Tax,
$order->ShippingAmount,
$order->City,
$order->State,
$order->Country
);
// Loop through each item that the order had
foreach($order->Items as $item)
{
// And add in the item to pass to Google Analytics
Yii::app()->googleAnalytics->_addItem(
$order->OrderID,
$item->SKU,
$item->Name,
$item->Category->Name,
$item->Price,
$item->Quantity
);
}
// Finally, call _trackTrans to finalize the order.
Yii::app()->googleAnalytics->_trackTrans();
}
}
Nearly all of the methods are accessible via the extension. The exceptions are as follows:
- Any deprecated method
- Any method starting with
_get
_link
(see: issue #2)_linkByPost
(see: issue #3)
It should be noted that methods are output in a FIFO (First In, First Out) method. This is important because some methods such as _setCustomVar need a _trackPageview, _trackEvent, or _trackTrans after it in order for the data to be sent in.
Rendering within the extension depends on the way you configured it.
If auto rendering is enabled and you followed the configuration steps (adding beforeRender
call to your controllers)
then there is nothing else for you to do to render the JavaScript code.
If you have auto rendering disabled (which it is by default), then you can call the render()
method within your views
which will return the rendered Google Analytics JavaScript code. In almost all cases, you should use this in your main layout views (e.g. protected/views/layouts/main.php
)
<script type="text/JavaScript">
<?php echo Yii::app()->googleAnalytics()->render(); ?>
</script>
Note: The render
method does not wrap <script></script>
tags around the output. If auto-rendering is enabled,
CClientScript::registerScript
is utilized, otherwise JavaScript code is returned.