PHP + Smarty: разобрать PHP+HTML в строку?

Я использую PHP в сочетании с Smarty Templates для создания серверных страниц. В настоящее время я загружаю страницу следующим образом:

$smarty->assign('app', file_get_contents("some_content.php"));

Где некоторый контент содержит HTML с тегами PHP и кодом внутри этих тегов.

Я хотел бы, чтобы содержимое PHP внутри этого файла находилось в текущей области (скрипт, читающий файл), чтобы была доступна определенная функция, которую я определил. Как мне это сделать? Вся информация, которую я могу найти, касается функции eval(...), которая, похоже, не может справиться со смесью HTML/PHP: нужно ли мне выполнять операцию поиска/оценки/замены для достижения желаемого результат, или есть более элегантный способ сделать это?


person Liam M    schedule 24.04.2012    source источник


Ответы (3)


На мой взгляд, этот короткий фрагмент кода, который вы разместили, показывает, что что-то там вообще не так :)

Но, тем не менее, вы можете добиться всего, чего пытаетесь достичь, выполнив следующие действия:

ob_start();
include("some_content.php");
$result = ob_get_clean();
$smarty->assign('app', $result);
person Eugene    schedule 24.04.2012
comment
Спасибо, Евгений, я взял ваш код и превратил его в симпатичную маленькую функцию с именем parse_in_scope, аргументом которой является файл для анализа, а возвращаемым значением является $result. Работает отлично, спасибо! - person Liam M; 24.04.2012
comment
PS, что, по-вашему, "вообще не так" во фрагменте? Этот код является своего рода инкапсуляцией более крупной проблемы, но я хотел бы услышать, что вы думаете :^). - person Liam M; 24.04.2012
comment
Для меня единственная ситуация, которая каким-то образом оправдывает попытку присвоить оцененный php/html-код переменной Smarty, — это попытка использовать какой-то сторонний код как есть :) - person Eugene; 24.04.2012
comment
Это в значительной степени то, что я делаю, я на самом деле немного отвлекся, и, возможно, в этом нет необходимости, но приятно иметь этот трюк в моем поясе с инструментами. - person Liam M; 25.04.2012

Ич, я такой думкопф. Ответ есть прямо в руководстве по PHP для eval, прямо у меня под носом. Вот ответ, который я не заметил.

person Liam M    schedule 24.04.2012

Вы можете использовать умные теги {literal}...{/literal}, чтобы отображать любой контент в умных шаблонах как есть. Он использовался для передачи java-скриптов и другого специфического контента.

person Valeriy Gorbatikov    schedule 24.04.2012