首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在php中解析智能函数?

如何在php中解析智能函数?
EN

Stack Overflow用户
提问于 2013-09-07 13:21:05
回答 1查看 165关注 0票数 2

我希望有人能为我指出正确的方向。

假设我将智能模板存储在数据库中。它可以是这样的:

代码语言:javascript
复制
{currentusername UserID="5"}

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

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

这有可能吗?

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

代码语言:javascript
复制
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";
    }
  }

我是否可以通过智能来解析$macro,以便变量$resolvedmacro包含正确的值?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-07 13:48:08

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

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

代码语言:javascript
复制
require('smarty/libs/Smarty.class.php');
$smarty = new Smarty;

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

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

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

注意:在Smarty 3中添加了 string:eval:资源类型;如果出于某种原因需要使用Smarty 2,则需要编写或找到一个资源插件来完成相同的工作。您还可以为任何版本编写一个资源插件,从数据库中获取特定的宏并在一个步骤中呈现它;Smarty 3的医生来了

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18673715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档