Intereting Posts
Кажется, что значения POST теряются при использовании .htaccess RewriteRule. Значения GET в порядке. Как исправить? Расшифровка .ASPXAUTH Cookie с защитой = проверка Настройка phpmailer на iis7 Фоновые процессы PHP Ошибка при попытке отправить новый пароль на электронную почту php Как получить окончательный URL-адрес после перенаправления HTTP в чистом PHP? PHP Разбиение массива на два массива – массив массивов и значений ключей Как мне отобразить информацию об ошибке внутреннего сервера PHP? laravel – не удается перенаправить множественную аутентификацию на разные страницы Как проверить, что пользователь IF УЖЕ любил страницу на facebook? Изменение размера / Обрезание изображения для настройки в макете Как передать данные POST в PHP-CGI? настройка wampserver после установки, чтобы включить ssl Symfony3 – обновление нескольких объектов в одном sql-запросе преобразование изображения blob в файл в php

Smarty: оцените шаблон, хранящийся в переменной PHP

У меня есть переменная php, в которой есть html / smarty-код

$x='<a href="{$link}" >{$title}</a>'; 

Эти данные извлекаются из базы данных, я хочу оценить ее с помощью smarty и поместить вывод в переменную php (чтобы распечатать ее или снова сохранить в базе данных).

благодаря

Редактировать :

Я хочу, чтобы содержимое X оценивалось с помощью smarty, как если бы содержимое x хранилось в файле.tpl, тогда $ y = $ smarty-> fetch ('file.tpl'); … хочу сделать это без необходимости сохранять содержимое x в файл

Related of "Smarty: оцените шаблон, хранящийся в переменной PHP"

Если вы используете Smarty 3, вы можете легко это сделать

 $smarty->fetch('string:'.$template_string); 

или 'eval:'.$template_string . подробнее об этом в руководстве

Если вы не используете Smarty 3 и у вас нет ресурса string / eval, вы можете использовать плагин Smarty eval . Я нашел это намного проще, чем создание настраиваемого ресурса и гораздо менее проблематичное.

 $template = "put some {$variables} in here" require_once( $smarty->_get_plugin_filepath( 'function', 'eval' )); $compiled = smarty_function_eval(array('var'=>$template), $smarty); 

Ни один из приведенных выше примеров не работал для меня, возможно, потому, что в настоящее время мы используем более старую версию smarty. Решением, которое работало для нас, было создание шаблона, который мы назвали eval.tpl который содержал только следующую строку:

 {eval var=$string} 

Затем, когда мы хотели оценить строку, мы могли бы просто использовать следующее:

 $smarty->assign('string', $string); $result = $smarty->fetch('eval.tpl'); 

См. «Пример 15.9. Использование пользовательских ресурсов» здесь: http://www.smarty.net/docsv2/en/template.resources

Если я следую за вами, вы имеете в виду, что вся строка была в базе данных, то есть с {$ link} как часть строки. Я не уверен, как smarty работает точно, но мне кажется, что если он даже сможет это сделать, для этой строки потребуется eval (). (Если smarty не делает что-то напуганное, что мне не хватает, опять же, я не работаю с smarty)

Это означает, что у вас есть ОЧЕНЬ небезопасная настройка. Если ваша база данных когда-либо страдает от SQL-инъекции, весь ваш сервер может быть скомпрометирован.

Запуск этих файлов, которые были жестко закодированы в приложении, не является серьезной проблемой безопасности, поскольку у вас есть контроль над кодом, который называется .tpl, и у вас есть контроль над самой .tpl. Это «безопасное» использование eval, поскольку вам придется иметь какой-то серьезный доступ к серверу, чтобы он мог его использовать, а именно тот доступ, который был бы причиной его использования.

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

Я нашел это. http://www.smarty.net/forums/viewtopic.php?t=18010

Это говорит, что если вы используете Smarty 3, вы можете использовать переменную php в качестве шаблона следующим образом:

 $smarty->fetch('string:'.$string);