Yii 1.1: tp-google-analytics

A simple way to add Google Analytics to your application and includes options for advanced usage.
17 followers

Google Analytics Extension

The TagPla.net Google Analytics extension allows users to add Google Analytics to their application easily. It also includes more advanced options including setting custom variables, e-commerce tracking, multiple Google Analytics instances and much more!

Installation

Step 1: Upload the files

The first step is straightforward; simply unzip the files from the download here or over on GitHub 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 add in this extension as a Git Submodule. You can read more about that in the full installation instructions

Step 2: Add in configuration

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, replacing the account number with your Google Analytics account number:

'googleAnalytics' => array(
    'class' =>'ext.TPGoogleAnalytics.components.TPGoogleAnalytics',
    'account' => 'UA-########-#',
),

Step 3: (Optional) Add in auto-render

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, simply add in the following line to it, before the return statement:

Yii::app()->googleAnalytics->render();

Usage

Accessing Google Analytics in Yii

Since the Google Analytics extension is setup as a component, you can simply use the following call to access the extension:

Yii::app()->googleAnalytics

Calling a Google Analytics Method

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 simple example

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 the above via the extension:

Yii::app()->googleAnalytics->_setCustomVar(1, 'Section', 'Life & Style', 3);

A more complex example

Sometimes you need to push quite a bit of data into Google Analytics. With this extension, that is fairly easy.

For 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:

// ...
 
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();
    }
}

Disallowed methods

Nearly all of the methods are accessible via the extension. The exceptions are as follows:

  • Any deprecated method
  • Any method starting with _get
  • _link
  • _linkByPost

About the methods

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 the Google Analytics Output

Rendering within the extension depends on the way you configured it.

If Auto Rendering is enabled
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 Auto Rendering is disabled
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.

Configuration Options

This component allows for some flexibility within the configuration section. Below are all of the allowed configuration variables:

  • account - Your Google Analytics account ID
    • Required: yes
    • Type: string
    • Format: UA-########-#
    • Default: (none)
  • class - The TPGoogleAnalytics class location
    • Required: yes
    • Type: string
    • Default: ext.TPGoogleAnalytics.components.TPGoogleAnalytics
  • autoPageview - Automatically add _trackPageview to the code. By disabling this, you will need to call Yii::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
    • Recommended Setting: true
    • Default: true
  • 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
    • Recommended Setting: true
    • Default: false
  • 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
    • Recommended Setting: ''
    • Default: ''

Resources / Links

Related TagPla.net Analytics Extensions

Changelog

Oct 18, 2012

  • Updated links to point to the new GitHub project
  • Added information about Git Submodules
  • Added in related extensions

Total 3 comments

#14349 report it
Sierra101 at 2013/08/05 06:21pm
How to use _anonymizeIp()

Hey, first of all, nice extension! But can you tell me how to use the _anonymizeIp() functionality with your extension? Following didn't work - at least in the before or afterRender() methods of the controller class.

// mask ip address
            Yii::app()->googleAnalytics->_setAccount('UA-xxxx'); 
            Yii::app()->googleAnalytics->_anonymizeIp();
            Yii::app()->googleAnalytics->_trackPageview();

thanks!

#12530 report it
MisterPhilip at 2013/03/26 04:30pm
Re: Problem rendering methods (#12529)

Hi aleksdj -

"To solve that Im rendering the widget in afterRender() function at 'Controller', is there any problem with that?" That should be fine, and I can't think of any issues with it.

Also, I'd suggest checking out the GitHub project page, as there have been updates I've made there that I haven't had a chance to translate over here yet.

#12529 report it
aleksdj at 2013/03/26 03:05pm
Problem rendering methods

Hello, im using this extension to implement GA code and some events methods. The problem is that if you render the widget in beforeRender() function at "Controller" you cannot execute methods in views (for example I want to track events in "thankyou page" or link "onclick"). To solve that Im rendering the widget in afterRender() function at "Controller", is there any problem with that?

I like the fact that all the "GA Initial" code stay in "Controller" but I want to be able to push methods from views. Any other solution? thanks

Leave a comment

Please to leave your comment.

Create extension