Difference between revisions of "Templates and Custom PHP Logic"

From WHMCS Documentation

(Created page with "We strongly recommend that all custom PHP logic be performed via hooks. Hooks are the only future-proof way of performing your own PHP logic at the time of page rendering. H...")
(No difference)

Revision as of 13:32, 17 May 2015

We strongly recommend that all custom PHP logic be performed via hooks. Hooks are the only future-proof way of performing your own PHP logic at the time of page rendering.

Historically, Smarty has always allowed you to define custom PHP logic directly within template files. This has often been used by users and third party developers as a quick and convenient way of performing additional logic and defining additional template output.

However, as of Smarty 3, support for the {php} block has been removed, and we are only providing legacy support to ease the transition for developers and users who work with our platform and rely on this functionality.

In WHMCS 6.0 and later, a Security setting "Allow Smarty PHP Tags" has been introduced in Setup > General Settings > Security which must be checked to enable the use of PHP tags. At the time of writing, this setting defaults to On. In the future, this setting will be defaulted to Off.

Below is an example of how a hook can be used to perform additional logic and define template variables for use in client area template files.

<?php
/**
 * Hook sample for defining additional template variables
 *
 * @param array $vars Existing defined template variables
 *
 * @return array
 */
function hook_template_variables_example($vars)
{
    $extraTemplateVariables = array();

    // set a fixed value
    $extraTemplateVariables['fixedValue'] = 'abc';

    // fetch clients data if available
    $clientsData = isset($vars['clientsdetails']) ? $vars['clientsdetails'] : null;

    // determine if client is logged in
    if (is_array($clientsData) && isset($clientsData['id'])) {
        $userId = $clientsData['id'];
        // perform calculation here
        $extraTemplateVariables['userSpecificValue'] = '123';
        $extraTemplateVariables['anotherUserOnlyValue'] = '456';
    }

    // return array of template variables to define
    return $extraTemplateVariables;
}

add_hook('ClientAreaPage', 1, 'hook_template_variables_example');