如何解决php中的smarty函数?

我希望有人可以为此指出正确的方向。

可以说我将Smarty模板存储在数据库中。它看起来可能像这样:

{currentusername UserID="5"}

currentusername是用于获取用户名的自定义函数。在模板中使用时,所有显示均正确。但是,如果我想在我的PHP代码中获得已解析的currentusername函数,该怎么办?

基本上,我将从数据库中获取模板,通过smarty对其进行解析,然后在代码中进一步使用currentusername。

那可能吗?

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

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包含正确的值吗?

即时通讯

Smarty可以使用string: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的文档在这里

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章