Продолжаю серию статей на тему создания демонстрационного сайта на PHP фреймворке HLEB. В этой теме будут рассмотрены шаблоны, необходимые для генерации HTML-контента. Сам принцип шаблонов подразумевает, что там может быть не только HTML. В текущем проекте это страницы, некоторые части которых (footer и header) вынесены в отдельные шаблоны.
Шаблоны страниц
У этих шаблонов один общий признак - в них могут быть переданы переменные из контроллера, которые наполняют шаблон как эскиз осмысленным конкретным контентом.
Создайте файлы и разместите там следующие примеры кода:
<!-- Файл /resources/views/template/header.php -->
<!DOCTYPE html>
<html lang="ru">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<!-- Вывод уникального токена для защиты AJAX-запросов -->
<meta name="csrf_tocken" content="<?= csrf_token() ?>">
<!-- Добавленные в контроллере стили выводятся здесь -->
<?php getRequestHead()->output(); ?>
</head>
<body>
<!-- Файл /resources/views/template/footer.php -->
<br><hr>
<div>
<a href="<?= app()->getUrlByName('homepage'); ?>" >Главная страница</a>
</div>
<?= getRequestResources()->getBottomScripts(); ?>
</body>
</html>
Это файлы, которые будут вставлены в основные страницы в верхней и нижней части соответственно. В них выводятся также стили и скрипты, назначенные перед этим в контроллере.
Теперь шаблоны с контентом, они похожи.
<!-- Файл /resources/views/contacts.php -->
<?php require "template/header.php"; ?>
<h1> Контактная информация </h1>
<div><p>E-mail: test@test.ru</p></div>
<?php require "template/footer.php" ?>
Шаблон с политикой конфиденциальности может пригодится для указания в настройках регистрации, больше он не несет практического смысла, кроме как служит демонстрацией вывода шаблона без контроллера, вследствие чего стили в нем надо подключать свои.
<!-- Файл /resources/views/privacy-policy.php -->
<?php require "template/header.php"; ?>
<h1> Политика конфиденциальности </h1>
<div>
<p>При регистрации на сайте пользователь даёт согласие на обработку и публичное размещение следующих данных: E-mail, логин, ФИО, дата регистрации. </p>
<p>При подсчете лайков зарегистрированного пользователя администрация сайта может обнародовать результат. </p>
<p>Спасибо за понимание! </p>
</div>
<?php require "template/footer.php" ?>
В шаблоне (V - вид) с информацией о пользователе выводится информация, полученная в контроллере (С - контроллер) через модель (М - модель). Пример MVC.
<!-- Файл /resources/views/user.php -->
<?php require "template/header.php"; ?>
<h1> Пользователь </h1>
<div><?php
/** @param array $data - переданный из контроллера массив с данными пользователя. */
foreach ($data as $key => $value) {
echo "<p>" . ucfirst($key) . ": " . strip_tags($value) . "</p>";
}
?><p>♥: <?php
/** @param int $like_count - переданное из контроллера количество лайков пользователя. */
echo $like_count;
?></p>
</div>
<?php require "template/footer.php" ?>
Последний, самый главный в этом проекте шаблон - домашняя страница сайта.
<!-- Файл /resources/views/home.php -->
<?php require "template/header.php";
use Phphleb\Hlogin\App\System\UserRegistration; ?>
<h1> Лайкер 1.0</h1>
<div>
Кликни на <button onclick="
<?=
/** Проверка на любого зарегистрированного пользователя, в том числе, если не подтвердил Email */
UserRegistration::checkPrimaryAndHigher() ? "addLikeForUser()" : "";
?>
">♥</button>
<span id="NumberOfLikes">
<?=
/** @param int $user_count - переданное из контроллера количество лайков текущего пользователя. */
UserRegistration::checkPrimaryAndHigher() ? $user_count : "(необходимо <span onclick=\"hloginVariableOpenPopup('UserRegister');\"><u>зарегистрироваться</u></span>)";
?>
</span>
</div>
<br>
<h2>Топ</h2>
<table border="1">
<tr><td>ID Пользователя</td><td>Результат</td></tr>
<?php
/** @param array $data - переданный из контроллера массив с данными пользователей. */
foreach ($data as $row): ?>
<tr><td><a href="/user/<?= $row['id']; ?>"><?= $row['id']; ?></a></td><td><?= $row['count']; ?></td></tr>
<?php endforeach; ?>
</table><br>
<hr>
<div>
<!-- Вывод URL по имени маршрута -->
<a href="<?= app()->getUrlByName('contacts'); ?>" >Контакты</a>
<!-- Здесь добавляется значение user_id, так как маршрут динамический -->
<a href="<?= app()->getUrlByName('user', ['user_id' => 1]); ?>" >Профиль Администратора</a>
</div>
<!-- Вывод скриптов, назначенных в контроллере -->
<?php print getRequestResources()->getBottomScripts(); ?>
</body>
</html>
Примечание: здесь приведены скриншоты, но сайт еще выглядит совсем не так, стили будут загружены на следующем шаге. Дождитесь окончания, прежде чем открыть эти страницы в браузере.


