предисловие (+/-)
Задача:
Рекурсивный шаблонизатор.
Решение:
Для тех, кто не в курсе, под рекурсивным шаблонизатором имеется в виду некое решение, позволяющее взять вот такие шаблоны:
<!DOCTYPE html>
<html>
<head>
<!-- Подключение файла head.html -->
</head>
<body>
<?= $content ?>
</body>
</html>
<title><?= $title ?></title>
<meta charset="utf-8" />
и сформировать из них такую страницу:
<html>
<head>
<title>Загловок</title>
<meta charset="utf-8" />
</head>
<body>
Тело
</body>
</html>
Другими словами, это механизм, позволяющий заполнить шаблон данными с возможностью подключения в шаблоне другого шаблона.
В PHP минимально (на мой взгляд) реализуется следующим образом:
<?php
/**
* @param string $path Адрес шаблона.
* @param array $assign Переменные, передаваемые шаблону.
*
* @return string Скомпилированный документ.
*/
function template($path, array $assign = []){
extract($assign);
ob_start();
include($path);
return ob_get_clean();
}
Используется так:
echo template('index.html', [
'title' => 'Заголовок',
'content' => 'Тело',
]);
Послесловие (+/-)