How to increment the counter

There are three easy ways to increment a view counter. Each method uses the same parameters:

Parameter Description
elementId The ID of whatever element (Entry, Asset, User, etc) you want to record views of.
key (optional) A custom string to allow multiple view types for the same element.
userId (optional) A specific user to associate this view with. Will default to the ID of the currently logged-in user, or null if not logged in.

# PHP - Call from a custom plugin or module

Under the hood, each method of incrementing the counter relies on this PHP function:

ViewCount::$plugin->view->increment($elementId, $key = null, $userId = null);

# Twig - On page load

In its simplest form, you can easily increment the view counter for a given element:

{% do craft.viewCount.increment(elementId) %}

All parameters are available at the Twig level:

{% do craft.viewCount.increment(elementId, key, userId) %}

# JavaScript - Trigger via AJAX

Here's an example (using jQuery) of how to increment a view counter via AJAX:

function incrementView(elementId, key) {

    // Set view data
    var data = {
        'id': elementId,
        'key': key
    };

    // Append CSRF Token
    data[window.csrfTokenName] = window.csrfTokenValue;

    // Render search results
    $.post(
        'actions/view-count/increment',
        data,
        function (response) {
            // Handle response
        }
    );

}

No userId for AJAX calls

For security reasons, you cannot control the userId value when submitting via AJAX. It will always default to the currently logged-in user, or null if not logged in.

If you really need to override the userId, copy the IncrementController::actionIndex function into your own custom module.