Мне было малость скучно...
function render($template, array $data = array()) {
$content = file_get_content(sprintf('%s/templates/%s.tpl', __DIR__, $template);
return preg_replace_callback('/\{\{\s*([a-z_\-][a-z0-9_\-]*)\s*(\|\s*raw\s*)?\}\}/i', function ($matches) use ($data) {
$needToEscape = !isset($matches[2]);
if (!isset($data[$matches[1]]) {
throw new \Exception(sprintf('Variable "%s" not exists', $matches[1]));
}
$value = $data[$matches[1]];
if ($needToEscape) {
// тут можно придумать чего получше, это просто для примера.
$value = htmlentities($value);
}
return $value;
}, $content);
}
Использование:
<!-- post.tpl -->
<h1>{{ title }}</h1>
{{ content | raw }}
echo render('post', ['title' => 'Some Title', 'content' => 'Some <strong>content with html</strong>!']);