使用WHMCS的智能模板引擎。需要在.tpl文件中使用来自外部php文件的php函数

时间:2017-05-31 05:43:36

标签: php smarty whmcs smarty3 smarty-plugins

尝试在A.tpl中获取输出但没有获得任何输出。我想我在tpl文件中调用php函数做错了。

A.tpl

{myModifier}

B.php

class Geolocation{
    public function sm_loc($params, Smarty_Internal_Template $template)
    {
        return "100.70";
    }
}

$smarty1 = new Smarty();

$smarty1->registerPlugin('modifier', 'myModifier', array('Geolocation', 'sm_loc'));

我已经使用过此代码了。而这似乎不起作用。它还会破坏我在A.tpl中使用的现有工作代码。

我需要的是从外部php文件中获取A.tpl中php函数的输出。

先谢谢。对不起是菜鸟。

1 个答案:

答案 0 :(得分:0)

要将此修饰符添加到Smarty并在模板中使用它,最好使用WHMCS钩子。

如果你在'〜/ includes / hooks /'目录下创建一个新的PHP文件(你可以命名它 - 在这种情况下,让我们使用'myhook.php'),WHMCS会自动在每个请求上注入这个钩子

为此,您将要使用ClientAreaPage挂钩。在钩子内,您可以访问全局<div ng-if="isEmpty(card)">Object Empty!</div> $scope.isEmpty = function(obj){ return Object.keys(obj).length == 0; } 变量。

示例:

$smarty

这应该可以解决问题。如果您想探索其他钩子,可以查看WHMCS文档中的Hook Index

每个挂钩文件中的函数名称必须是唯一的。

作为旁注,如果您只想在特定页面上运行此挂钩,则可以检查传递的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'); 数组中的templatefile键。例如,假设您只希望此挂钩在订单上的“查看购物车”页面上运行:

$vars

另外,请注意,对于像'ClientAreaPage'钩子这样的钩子,返回一个键和值数组会自动将它们添加为Smarty变量。因此,如果您的钩子函数以function MySmartyModifierHook(array $vars) { global $smarty; // If the current template is not 'viewcart', then return if ($vars['templatefile'] != 'viewcart') return; // ... your code here ... } 结束,则可以在Smarty模板中使用return ['currentTime' => time()];输出其值。