要将此修饰符添加到 Smarty 并在您的模板中使用它,您最好使用 WHMCS 挂钩。
如果你在 '~/includes/hooks/' 目录下创建一个新的 PHP 文件(你可以命名它——在这种情况下,让我们使用 'myhook.php'),WHMCS 将自动在每个请求上注入这个钩子。
为此,您将要使用ClientAreaPage挂钩。在你的钩子里,你可以访问全局$smarty
变量。
例子:
function MySmartyModifierHook(array $vars) {
global $smarty;
// I recommend putting your Geolocation class in a separate PHP file,
// and using 'include()' here instead.
class Geolocation{
public function sm_loc($params, Smarty_Internal_Template $template) {
return "100.70";
}
}
// Register the Smarty plugin
$smarty->registerPlugin('modifier', 'myModifier', array('Geolocation', 'sm_loc'));
}
// Assign the hook
add_hook('ClientAreaPage', 1, 'MySmartyModifierHook');
这应该够了吧。如果您想探索其他钩子,可以查看 WHMCS 文档中的钩子索引。
每个挂钩文件中的函数名称必须是唯一的。
附带说明一下,如果您只想在特定页面上运行此挂钩,则可以检查templatefile
传递$vars
数组中的键。例如,假设您只希望此挂钩在订单表单的“查看购物车”页面上运行:
function MySmartyModifierHook(array $vars) {
global $smarty;
// If the current template is not 'viewcart', then return
if ($vars['templatefile'] != 'viewcart')
return;
// ... your code here ...
}
另外,请注意,使用像“ClientAreaPage”钩子这样的钩子,返回一个键和值数组将自动将它们添加为 Smarty 变量。所以如果你的钩子函数以 结尾return ['currentTime' => time()];
,你可以{$currentTime}
在 Smarty 模板中使用它来输出它的值。