Почему содержимое head передаётся в body PHP?
Пытаюсь сделать шаблоны страниц. На одном сайте нашёл код, который только частично работает. После выполнения скрипта, на готовой странице в тэге <head> не пишется ничего, но пишется в <body>, хотя в шаблоне прописано нормально. Вероятно дело в функции renderTemplate или том, как формируется контент. Как это исправить?
Страница сборки:
<?php
function renderTemplate($template, $param = false) {
ob_start();
if ($param) {
extract($param);
}
include($template);
}
$items_list = ['patch' => 'pa', 'id'=>'id', 'title'=>'ti', 'temp'=>'et'];
// Этот блок выводится первым, а после него всё содержимое тэга head и остаток страницы
$page_content = renderTemplate('main.php', ['items' => $items_list]);
$layout_content = renderTemplate('layout.php',
['content' => $page_content, 'title' => 'Dnevnik наблюдений за погодой']);
print($layout_content);
?>
Страница шаблона:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title><?= $title; ?></title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<header class="main-header">
<h1 class="visually-hidden">Дневник погоды</h1>
</header>
<div class="main-content">
<main class="content"><?= $content; ?></main>
</div>
<footer class="main-footer">Дневник наблюдения за погодой.</footer>
</body>
</html>
Контент:
<div class="content__main-col">
<h2 class="visually-hidden">Последние записи</h2>
<a class="button" href="">Добавить новую</a>
<ul class="items-list">
<?php foreach ($items as $item): ?>
<?=renderTemplate('item.php', ['item' => $item]);?>
<?php endforeach; ?>
</ul>
</div>