Как я могу сохранить шаблон и загрузить его из базы данных с помощью smarty template engine

#php #smarty

#php #smarty

Вопрос:

Мне сложно сохранить мой шаблон в базе данных и загрузить содержимое для просмотра с помощью Smarty.

Я следовал руководству по Smarty.net о том, как создать пользовательский тип извлечения.

Моим первоначальным методом было сохранить разметку tpl в БД, затем загрузить ее и передать как переменную в переменную, назначенную smarty, и в моем text.pl сделайте что-то вроде {$source}

но это анализирует его как строку, и smarty не будет его компилировать.

руководство на веб-сайте smarty не помогло и просто оставляет мне больше вопросов…

это то, что я попробовал на основе руководства

 function db_get_template($tpl_name, amp;$tpl_source, amp;$s)
{
    $tpl_name = "index.tpl";
    $tpl_source = nl2br($defaults->get_default_theme('theme_data'));
    return true;
}
function db_get_timestamp($tpl_name, amp;$tpl_timestamp, amp;$smarty)
{
    $tpl_timestamp = (int)time();
    //$tpl_timestamp = (int)$defaults->get_default_theme('modified_on');
    return true;
}

function db_get_secure($tpl_name, amp;$smarty)
{
    // assume all templates are secure
    return true;
}

function db_get_trusted($tpl_name, amp;$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:

Я чувствую себя грязным, даже предлагая это, но:

Вот более актуальная страница руководства чем страница, на которую вы ссылались.

В частности, обратите внимание на string: префикс к «filename», передаваемый при display вызове метода. Вы можете просто извлечь данные шаблона из своей базы данных (ужасная идея, ИМНШО) и таким образом передать их в Smarty. Нет необходимости создавать свой собственный пользовательский ресурс, если вы действительно не хотите делать это таким образом.

Я, например, настоятельно рекомендую вам сохранить его как можно более глупым, уродливым и очевидным, чтобы напомнить себе о том, насколько это ужасная, никуда не годная идея. Я хотел бы напомнить вам, что Smarty компилируется на PHP, и размещение кода Smarty в базе данных является эффективным шлюзом для выполнения произвольного кода, серьезной уязвимости в системе безопасности.

Комментарии:

1. я тоже это видел, меня смущает то, как показать исходный код tpl. Где я могу его вывести и как.

2. Что вы имеете в виду под «показать исходный код tpl»? Что вы имеете в виду под «где я могу его вывести»? Эти утверждения непонятны. Пожалуйста, перечитайте первую страницу документации по ссылке еще раз и попробуйте настроить пример, чтобы понять, как это работает. Он должен соответствовать вашим требованиям.

3. хехе, я сожалею, что я нажал не на ту ссылку, которую вы предоставили. Но, чувак, это полностью решило мою проблему!