2

我希望有人能指出我在这方面的正确方向。

假设我将 Smarty 模板存储在数据库中。它看起来像这样:

{currentusername UserID="5"}

currentusername 是获取用户名的自定义函数。在模板中使用时所有显示正确。但是如果我想在我的 php 代码中得到解析的 currentusername 函数呢?

基本上我会从数据库中获取模板,通过 smarty 解析它,然后在代码中进一步使用当前用户名。

那可能吗?

编辑,以便更好地理解。我有一段代码:

require('smarty/libs/Smarty.class.php');
$smarty = new Smarty;

$macro = '{currentusername UserID="5"}';

$resolvedmacro = ""; // this should contain the "Jerry";

function smarty_function_currentusername($params, &$smarty){
  $UserID = $params["UserID"];
  if ($UserID == 5){
    return "Jerry";
    }
  else{
    return "I dont know this guy";
    }
  }

我可以通过 smarty 以某种方式解析 $macro 以便变量 $resolvedmacro 包含正确的值吗?

4

1 回答 1

2

string:Smarty 可以使用“资源类型”或eval:“资源类型”来渲染字符串,就像它是一个模板一样- 有关详细信息,请参阅字符串模板资源的文档

然后,您可以使用$smarty->fetch()将该“模板”的输出获取到普通的 PHP 变量中:

require('smarty/libs/Smarty.class.php');
$smarty = new Smarty;

$macro = '{currentusername UserID="5"}';

$resolvedmacro = $smarty->fetch('string:' . $macro);

有一个更广泛的问题是你为什么要这样做,以及 Smarty 是否是这项工作的正确工具 - 例如,如果可能的回调数量有限,使用 Smarty 解决它们可能会使事情过于复杂而不仅仅是存储回调的名称及其参数并通过 switch 语句运行它。

注:string:资源eval:类型是 Smarty 3 中添加的;如果由于某种原因您需要使用 Smarty 2,您将需要编写或查找资源插件来完成相同的工作。您还可以为任一版本编写资源插件,从数据库中获取特定宏并一步呈现它;Smarty 3 的文档在这里

于 2013-09-07T13:48:08.890 回答