Templates and Custom PHP Logic

From WHMCS Documentation

Revision as of 19:20, 27 April 2022 by SarahK (talk | contribs)

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

Historically, Smarty has allowed you to define custom PHP logic directly within system theme and order form template files. This allowed for a quick and convenient way of performing additional logic and defining additional system theme and order form template output.

However, Smarty 3 removed support for the {php} block. WHMCS now only provides legacy support to ease the transition for developers and users who rely on this functionality.

WHMCS 6.0 and later include a backwards compatibility Allow Smarty PHP Tags setting in the Security tab at Configuration () > System Settings > General Settings or, prior to WHMCS 8.0, Setup > General Settings.

  • You must select this to enable the use of PHP tags.
  • This setting defaults to Off and may be removed in a future version.

Example Hook File

The below example demonstrates how a hook can be used to perform additional PHP logic and define variables for use in system theme and order form template files.

The example below executes on the View Ticket page within the Client Area. Hook points for every page of the Client Area allow you to define system theme and order form template variables. For a full list, see Client Area Interface Hooks Index Listing.

<?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('ClientAreaPageViewTicket', 1, 'hook_template_variables_example');

The hook code above defines the additional system theme and order form template {$fixedValue} variable and, in the case of a logged-in user, the {$userSpecificValue} and {$anotherUserOnlyValue} variables. You can them use them in the associated system theme and order form template file (in this case, viewticket.tpl).

<p>The fixed value is {$fixedValue}.</p>
 
{if $userSpecificValue && $anotherUserOnlyValue}
    <p>I also have this {$userSpecificValue} and {$anotherUserOnlyValue} to show you.</p>
{/if}