我很难将模板保存到数据库并使用Smarty下载内容以进行查看。
我按照Smarty.net上的教程了解如何制作自定义检索类型。
我原来的方法是将tpl标记保存到db然后下载并将其作为变量传递给smarty赋值变量,并在我的text.pl中执行{$ source}
之类的操作但是这会将其解析为字符串,而smarty将无法编译它。
smarty网站上的教程没有帮助,只留下了更多问题......
这是我根据教程
尝试的function db_get_template($tpl_name, &$tpl_source, &$s)
{
$tpl_name = "index.tpl";
$tpl_source = nl2br($defaults->get_default_theme('theme_data'));
return true;
}
function db_get_timestamp($tpl_name, &$tpl_timestamp, &$smarty)
{
$tpl_timestamp = (int)time();
//$tpl_timestamp = (int)$defaults->get_default_theme('modified_on');
return true;
}
function db_get_secure($tpl_name, &$smarty)
{
// assume all templates are secure
return true;
}
function db_get_trusted($tpl_name, &$smarty)
{
// not used for templates
}
$s->registerResource("db", array(
"db_get_template",
"db_get_secure",
"db_get_trusted"
));
$s->display("db:index.tpl");
我不确定db:index.tpl从哪里被拉出来。我不知道加载到标记的位置......
答案 0 :(得分:0)
我觉得这样做很脏,但是:
Here's a more relevant manual page而不是page you were referencing。
特别要注意string:
方法调用中传递的“filename”的display
前缀。你可以简单地从你的数据库中提取模板数据(一个可怕的想法,IMNSHO)并以这种方式将其传递给Smarty。除非真的希望以这种方式执行,否则无需构建自己的自定义资源。
对于其中之一,我会敦促你尽可能保持愚蠢,丑陋和明显,以提醒自己这是多么可怕,不好的想法。我想提醒您,Smarty 编译为PHP ,将Smarty代码放入数据库是实现任意代码执行的有效途径,这是一个严重的安全漏洞。