Как я могу сохранить шаблон и загрузить его из базы данных, используя шаблонный движок smarty - PullRequest
0 голосов
/ 09 апреля 2011

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

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

Мой оригинальный метод состоял в том, чтобы сохранить разметку tpl в БД, затем загрузить ее и передать как переменную в назначенную переменную 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 голосов
/ 09 апреля 2011

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

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

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

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

...