Страницы вашего сайта, как правило, имеют некоторую общую структуру.
Например, типичная страница содержит объявление <!DOCTYPE>
для идентификации HTML-документа,
а также элементы <head>
и <body>
:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Welcome</title>
<!-- Вставьте мета-теги, таблицы стилей и скрипты -->
</head>
<body>
<!-- Вставьте содержимое страницы -->
</body>
</html>
Элемент <head>
содержит текст заголовка страницы, метаданные и
информацию об использованных таблицах стилей и скриптах. Элемент <body>
содержит содержимое страницы, то есть, логотип, панель навигации, текст
страницы и футер с информацией об авторских правах.
В Zend Framework 3 вы определяете подобную структуру с помощью "главного" шаблона представления, называемого лэйаутом. Лэйаут "украшает" другие шаблоны представления.
Шаблон лэйаута, как правило, имеет плейсхолдер,куда ZF3 помещает контент для конкретной указанной страницы (см. рисунок 6.2).
В Skeleton Application стандартный файл шаблона лэйаута называется layout.phtml. Он расположен внутри каталога view/layout в каталоге модуля Application (см. рисунок 6.3).
Давайте рассмотрим файл шаблона layout.phtml более детально. Ниже представлено содержимое файла целиком.
<?= $this->doctype() ?>
<html lang="en">
<head>
<meta charset="utf-8">
<?= $this->headTitle('ZF Skeleton Application')
->setSeparator(' - ')->setAutoEscape(false) ?>
<?= $this->headMeta()
->appendName('viewport', 'width=device-width, initial-scale=1.0')
->appendHttpEquiv('X-UA-Compatible', 'IE=edge')
?>
<!-- Стили -->
<?= $this->headLink(['rel' => 'shortcut icon', 'type' => 'image/vnd.microsoft.icon',
'href' => $this->basePath() . '/img/favicon.ico'])
->prependStylesheet($this->basePath('css/style.css'))
->prependStylesheet($this->basePath('css/bootstrap-theme.min.css'))
->prependStylesheet($this->basePath('css/bootstrap.min.css'))
?>
<!-- Скрипты -->
<?= $this->headScript()
->prependFile($this->basePath('js/bootstrap.min.js'))
->prependFile($this->basePath('js/jquery-2.2.4.min.js'))
?>
</head>
<body>
<nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse"
data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="<?php echo $this->url('home') ?>">
<img src="<?= $this->basePath('img/zf-logo.png') ?>"
alt="Zend Framework <?= \Application\Module::VERSION ?>"/>
Skeleton Application
</a>
</div>
<div class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li class="active">
<a href="<?= $this->url('home') ?>">Home</a>
</li>
</ul>
</div>
</div>
</nav>
<div class="container">
<?= $this->content; ?>
<hr>
<footer>
<p>© 2005 - <?= date('Y') ?> by Zend Technologies Ltd.
All rights reserved.
</p>
</footer>
</div>
<?= $this->inlineScript() ?>
</body>
</html>
Как видите, файл layout.phtml (как и обычный шаблон представления) состоит из HTML-тегов и фрагментов PHP-кода. При визуализации шаблона ZF3 вычисляет PHP-строки и генерирует получившуюся HTML-страницу, доступную пользователям сайта.
Строка 1 генерирует объявление <!DOCTYPE>
10 HTML-страницы с помощью
помощника видов Doctype
.
10) Объявление <!DOCTYPE>
идет первым в HTML-документе, перед тегом
<html>
. Объявление предоставляет браузеру инструкции о том, на какой
версии HTML написана страница (на нашем сайте мы используем объявление
HTML5-совместимого типа документа).
Строка 3 определяет элемент <html>
, представляющий собой корень HTML-документа.
За тегом <html>
следует тег <head>
(строка 4), который, как правило, содержит
заголовок документа и может содержать дополнительную информацию вроде скриптов,
CSS-стилей и метаданных.
В строке 5 тег <meta>
сообщает браузеру, что документ закодирован с помощью
кодировки символов UTF-8 11.
11) UTF-8 позволяет закодировать любой символ любого алфавита в мире, поэтому его рекомендуется использовать для кодировки веб-страниц.
В строке 6 мы видим помощник вида HeadTitle
, который позволяет определить заголовок
для страницы ("ZF Skeleton Application"). Он будет показан в заголовке окна браузера.
Метод setSeparator()
используется для определения символа-разделителя для "составных"
заголовков страниц12; метод setAutoEscape()
повышает безопасность,
"обрабатывая" (escape) небезопасные символы из заголовка страницы.
12) "Составной" заголовок страницы состоит из двух частей: первая часть ("ZF Skeleton Application") определяется лэйаутом, а вторая - определяемая конкретной страницей - является префиксом для первой. Например, у страницы вашего сайта About будет заголовок "About - ZF Skeleton Application", а для страницы Documentation - "Documentation - ZF Skeleton Application".
В строке 9 помощник вида HeadMeta
позволяет определить тег <meta name="viewport">
,
содержащий метаданные для веб-браузера, которые предназначены для управления лэйаутом на различных
устройствах, включая мобильные браузеры. Свойство width
контролирует размер области
просмотра, а свойство initial-scale
- уровень масштабирования загруженной страницы.
Это делает лэйаут веб-страницы "отзывчивым" к размеру области просмотра устройства.
В строке 15 помощник вида HeadLink
позволяет определить теги <link>
.
С помощью этих тегов <link>
, как правило, определяется "favicon" (FAVorite ICON — «значок для избранного»)
для страницы (находится в файле APP_DATA\public\img\favicon.ico
) и таблицы стилей CSS.
В строках 17-19 методом prependStylesheet()
помощника вида HeadLink
подключаются
таблицы стилей, общие для всех страниц сайта. Любая страница нашего веб-сайта будет
загружать три файла таблиц стилей CSS: bootstrap.min.css (минифицированная версия
фреймворка Twitter Bootstrap), bootstrap-theme.min.css (минифицированная таблица стилей темы)
и style.css (файл, позволяющий нам определить свои собственные CSS-правила, переопределяющие
правила CSS-правила Bootstrap).
Строки 23-25 включают JavaScript-файлы, которые будут загружаться всеми вашими веб-страницами.
Скрипты, выполняемые браузером клиента, позволяют добавить интерактивные функции вашим страницам.
Мы используем скрипты bootstrap.min.js
(минифицированная версия Twitter Bootstrap) и jquery-2.2.4.min.js
(минифицированная версия библиотеки jQuery). Все скрипты находятся в каталоге APP_DIR/public/js.
В строке 28 находится определение тега <body>
, тела документа, где находится
все его содержимое: панель навигации, текст, гиперссылки, изображения, таблицы,
списки и т.д.
В строках 29-52 находится определение панели навигации Bootstrap. Скелетное приложение использует складную панель навигации с темной темой. Панель навигации содержит одну единственную ссылку Home.
Если вы посмотрите на строки 53-61, вы заметите элемент <div>
с классом container
-
контейнером для системы сеток. Таким образом, вы можете использовать систему сеток Bootstrap
для организации содержимого ваших веб-страниц.
Строка 54 очень важна: в ней находится PHP-код, представляющий собой плейсхолдер для содержимого страницы, о которой мы говорили в начале этого раздела. Когда визуализатор ZF3 работает с шаблоном представления, содержимое текущей страницы отражается также и здесь.
Строки 56-60 определяют футер страницы. Футер содержит информацию об авторских правах, например, "2016 by Zend Technologies Ltd. All rights reserved." Вы можете вставить сюда название своей компании.
Строка 62 - это плейсхолдер для скриптов JavaScript, загружаемых определенной страницей.
Помощник вида InlineScript
будет заменять здесь все скрипты, которые вы зарегистрировали
(о регистрации скриптов JavaScript вы узнаете позже в этой главе).
И наконец, строки 63-64 содержат закрывающие теги для тела и HTML-документа.