# Шаблоны в MVC на PHP

Представления, которые мы с вами изучали в предыдущем уроке, на самом деле представляют собой контент страницы. Кроме контента, на странице, как правило, есть еще хедер, сайдбары, футер. Эти части обычно одинаковые на всех страницах сайта.

В нашем фреймворке каждая страница сайта представляет собой один и тот же 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 TestController 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'` станет тайтлом страницы.

←→
↑