PHP позволяет решить эту задачу множеством способов, использовать готовый шаблонизатор, например
Twig.
Или реализовать свой с использованием функций
ob_start() и
ob-get-clean(): создаете файлы
index.php и
functions.php, каталог
templates в котором будут храниться все файлы шаблонов. В каталоге
templates создаете файлы:
layout.php,
header.php,
footer.php,
content.php.
Файл
functions.php:
/**
* Функция загрузки шаблона
*
* @param string $template Путь до файлов шаблона
* @param mixed[] $data Данные для подстановки в шаблон
* @return string Возвращает готовый код шаблона
*/
function render_template($template, $data = []) {
ob_start();
if (file_exists($template)) {
extract($data);
require($template);
} else {
print('Нет файла шаблона: '.$template);
}
$html = ob_get_clean();
return $html;
}
Файл
index.php:
require_once __DIR__ . '/functions.php';
$header = render_template('templates/header.php', ['title' => 'Главная страница']);
$footer= render_template('templates/footer.php');
$content = render_template('templates/content.php');
$page_layout = render_template('templates/layout.php',
['header' => $header, 'footer' => $footer, 'content' => $content]);
print($page_layout);
Файл
templates/header.php:
<head>
<title><?=$title?></title>
</head>
Файл
templates/layout.php (в котором вместо
<?=$header?> будет выводиться содержимое из файла
templates/header.php и т.д.):
<!DOCTYPE html>
<html lang="ru">
<?=$header?>
<body>
<?=$content?>
<?=$footer?>
</body>
</html>