我希望有人可以为此指出正确的方向。
可以说我将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] 删除。
我来说两句