Создание сайта с помощью фреймворка HLEB. Часть 7. Работа с шаблонами

18 Сентября 2022 (ред)

Продолжаю серию статей на тему создания демонстрационного сайта на 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>&#9829;: <?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()" : "";
    ?>
">&#9829;</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>

Примечание: здесь приведены скриншоты, но сайт еще выглядит совсем не так, стили будут загружены на следующем шаге. Дождитесь окончания, прежде чем открыть эти страницы в браузере.

Скачать все файлы урока в ZIP-архиве

Предыдущая статья

В начало

Продолжение. Часть 8

fomiash fomiash + 221
Опубликовано в PHP фреймворк HLEB
Для ответа вы можете авторизоваться


Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.