#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. хехе, я сожалею, что я нажал не на ту ссылку, которую вы предоставили. Но, чувак, это полностью решило мою проблему!