0

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

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 函数的输出。

提前致谢。对不起,我是菜鸟。

4

1 回答 1

0

要将此修饰符添加到 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 模板中使用它来输出它的值。

于 2017-06-22T08:21:02.893 回答