Здравствуйте. Помогите решить задачу, а то пазл не как не складывается у меня Есть такой файл test.tpl с таким содержимым Код (Text): <html> <head>...</head> <body> <div id='test_1'> <div> ... </div> {php} for($i=0; $i<10; $i++) { echo $i; } {/php} </div> <div id='test_2'> <div> ... </div> {php} for($t=0; $t<10; $t++) { echo $t; } {/php} </div> </body> </html> С помощью регулярных выражений я нахожу всё что находится между {php} и {/php} вот только не понимаю как запустить эти циклы. Пробовал с помощью eval и вроде всё получилось ... вот только циклы отработали за пределами блоков. Подскажите как можно запустить php внутри тегов {php} и {/php} при этом что бы структура сайта не ломалась?
Добрый день! Попробуйте сделать так: PHP: <? $test_tpl = file_get_contents("test.tpl"); $test_php = str_replace(["{php}","{/php}"], ["<?","?>"], $test_tpl); eval ("?>".$test_php); или так: PHP: <? $test_tpl = file_get_contents("test.tpl"); $test_php = str_replace(["{php}","{/php}"], ["<?","?>"], $test_tpl); file_put_contents("test.php", $test_php); include_once "test.php"; В обоих решениях в браунзер отправится HTML: <html> <head>...</head> <body> <div id='test_1'> <div> ... </div> 0123456789 </div> <div id='test_2'> <div> ... </div> 0123456789 </div> </body> </html> Удачи!
Спасибо большое за помощь. Я в принципе делал так же за исключением одной вещи. Когда писал eval() то писал без "?>" Как писал я Код (Text): eval($test); А надо было Код (Text): eval("?>".$test); Ещё раз спасибо большое за помощь Смотрел, но к сожалению моему не до конца разобрался. Если сможете подсказать хорошие мануалы на эту тему буду признателен.
Оно ближе ко второму показанному выше варианту. Только без повторной генерации нативного для пыха шаблона каждый раз.