Как сделать шаблонизатор без ООП?

Здравствуйте, как сделать шаблонизатор без ООП. Прошу пример.
Нужен шаблонизатор с тегами типа {username} , точнее что бы он на странице подставлял вместо тегов нужные значения, шаблон конечно в .tpl
  • Вопрос задан
  • 2581 просмотр
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Мне было малость скучно...

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>!']);
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
PHP сам по себе является шаблонизатором.

Привет <?=$user_name?>!

Или сформулируйте вопрос более понятно.
Ответ написан
mlnkv
@mlnkv
JavaScript Developer
function renderTpl($tpl, $data) {
  return preg_replace_callback(
    "@\{(.+?)\}@", 
    function($matches) use ($data) {
      return isset($data[$matches[1]]) ? $data[$matches[1]] : "";
    }, 
    $tpl
  );
}

$template = "Hello {first_name} {last_name}!!!";

$data = array(
  "first_name" => "John",
  "last_name" => "Doe"
);

echo renderTpl($template, $data); //Hello John Doe!!!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы