Я пытаюсь создать сложную библиотеку шаблонов.Дело в том, что я держу свой собственный синтаксис и php в одном и том же файле, как смешанный.
Сначала мой синтаксис анализируется и переформатируется.Вывод обычного html + php в виде строки.Я не хочу создавать кеш-файл, но вместо этого использую строку, содержащую «средний» шаблон.
В этом шаблоне (строка, содержащая теги php и html) должны выполняться операции php.
MyComplexTemplate (мой синтаксис + php) = parse => Шаблон (HTML + PHP) = exec php => Результат (HTML)
для 2. Я пытаюсьиспользовать ob_start () с echo, но все внутри тегов php исчезает.
Например:
<?php
$asd = "123";
ob_start();
echo "<div><?php echo $asd; ?></div>"; // Middle template
$result = ob_get_contents();
ob_end_clean();
echo $result;
?>
Результат должен быть "
123
".На данный момент я получаю только теги div.
Это простой пример.Мой шаблон будет содержать все виды php-операций внутри php-тегов.
Возможна ли такая операция каким-либо образом?
UPDATE
Шаблон т.е.: (template.php)
.mySyntax (...) and so on
<?php foreach($asd as $data): ?>
<div><?php echo $data ?></div>
<?php endforeach; ?>
.mySyntax
some text
Синтаксический анализ шаблона с MySyntaxParser и выполнение php после этого, который остается нетронутым:
<?php
$t = new MySyntaxParser("template.php"); // My parser. Converts mySyntax to html.
$asd = array("test1", "test2");
ob_start();
echo $t->parse(); // Should execute php code inside the string;
$result = ob_get_contents();
ob_end_clean();
echo $result;
?>
ОБНОВЛЕНИЕ
Я хочу добиться абсолютно точной вещи, такой как здесь, но require_once должен как-то происходить из строки:
SOLUTION
На самом деле решение находится в этой теме PHP: эквивалент включения с использованием eval ,eval должен использоваться с pre и postpadded с php тегами.
Также вы должны проверить THIS blogpost.
Как здесь:
<?php
$asd = "123";
ob_start();
eval ('?>
<?php foreach(array("asd", "asx123") as $data): ?>
<div><?php echo $data ?></div>
<?php endforeach; ?>
<?php;');
ob_flush();
?>