如何使用智能模板引擎保存模板并从数据库下载

时间:2011-04-09 07:00:02

标签: php smarty

我很难将模板保存到数据库并使用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从哪里被拉出来。我不知道加载到标记的位置......

1 个答案:

答案 0 :(得分:0)

我觉得这样做很脏,但是:

Here's a more relevant manual page而不是page you were referencing

特别要注意string:方法调用中传递的“filename”的display前缀。你可以简单地从你的数据库中提取模板数据(一个可怕的想法,IMNSHO)并以这种方式将其传递给Smarty。除非真的希望以这种方式执行,否则无需构建自己的自定义资源。

对于其中之一,我会敦促你尽可能保持愚蠢,丑陋和明显,以提醒自己这是多么可怕,不好的想法。我想提醒您,Smarty 编译为PHP ,将Smarty代码放入数据库是实现任意代码执行的有效途径,这是一个严重的安全漏洞。