我希望有人能为我指出正确的方向。
假设我将智能模板存储在数据库中。它可以是这样的:
{currentusername UserID="5"}当前用户名是获取用户名的自定义函数。在模板中使用时,所有显示都是正确的。但是,如果我想在我的php代码中获得解析的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";
}
}我是否可以通过智能来解析$macro,以便变量$resolvedmacro包含正确的值?
发布于 2013-09-07 13:48:08
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语句运行它。
注意:在Smarty 3中添加了 string:和eval:资源类型;如果出于某种原因需要使用Smarty 2,则需要编写或找到一个资源插件来完成相同的工作。您还可以为任何版本编写一个资源插件,从数据库中获取特定的宏并在一个步骤中呈现它;Smarty 3的医生来了。
https://stackoverflow.com/questions/18673715
复制相似问题