Представления, которые мы с вами изучали в предыдущем уроке, на самом представляют собой контент страницы. Кроме контента, на странице, как правило, есть еще хедер, сайдбары, футер. Эти части обычно одинаковые на всех страницах сайта.
В нашем фреймворке каждая страница сайта представляет собой один и тот же HTML файл шаблона, к которому для каждой страницы сайта подключается в заданное место контент страницы из представления.
Файл с шаблоном размещается по следующему пути: /project/layouts/default.php.
Согласно правилам фреймворка, в этом файле доступна переменная $content. В том месте, где будет выведена эта переменная и произойдет вставка контента страницы.
По умолчанию этот файл содержит следующий простейший код:
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<?= $content ?>
</body>
</html>
Разместите в файле с шаблоном вот такой макет сайта:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>тайтл страницы</title>
</head>
<body>
<header>
хедер сайта
</header>
<div class="container">
<aside class="sidebar left">
левый сайдбар
</aside>
<main>
<?= $content ?>
</main>
<aside class="sidebar right">
правый сайдбар
</aside>
</div>
<footer>
футер сайта
</footer>
</body>
</html>
Зайдите на любое действие любого контроллера. Посмотрите, что поменялось.
Тайтл страницы
В файле шаблона также доступна переменная $title, содержащая тайтл страницы. Очевидно, что этот заголовок также будет разным для различных страниц. Давайте используем эту переменную по назначению:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title><?= $title ?></title> <!-- выводим тайтл страницы -->
</head>
<body>
...
</body>
</html>
Для того, чтобы задать тайтл для определенного представления необходимо в контроллере записать его в свойство title:
<?php
namespace Project\Controllers;
use Core\Controller;
class Test extends Controller
{
public function act()
{
//!! Зададим тайтл:
$this->title = 'Действие act контроллера test';
// Отрендерим представление, передав какие-то данные:
return $this->render('test/act', [
'var1' => 'eee',
'var2' => 'bbb',
'var3' => 'kkk',
]);
}
}
?>
Модифицируйте файл шаблона и все ваши контроллеры так, чтобы для каждого представления выводился свой тайтл.
Пусть в контроллере Page дан следующий массив:
<?php
$this->pages = [
1 => ['title'=>'страница 1', 'text'=>'текст страницы 1'],
2 => ['title'=>'страница 2', 'text'=>'текст страницы 2'],
3 => ['title'=>'страница 3', 'text'=>'текст страницы 3'],
];
?>
Сделайте действие show, которое будет выводить заданную страницу. Пусть в представлении текст страницы из ключа 'text' будет обернут в абзац, а текст из ключа 'title' станет тайтлом страницы.