Административная сторона сайта. CRUD

Введение

Для реализации административной части, нужно реализовать несколько логических идей: роли пользователей, возможность авторизации, просмотр и управление состоянием таблиц БД, заливка файлов, возможно некоторая статистика, возможность редактировать html файлы, изменение общих настроек сайта.

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

Центральный функционал будет крутиться вокруг управения контентом который хранится в БД. А именно тех таблиц, которые отвечают за сущности предметной области.

Авторизация и роли

Авторизация, как таковая, не имеет прямого отношения к админке, но является обязательной частью для её реализации. Все страницы админки должны быть закрыты от неавторизованного пользователя и пользователей не имеющих административных, менеджерских или редакторских прав.

Для реализации ролей вам понадобится таблица ролей с полями: id, name, module, module_edit. Если у вас сайт реализован на модулях, то в последние два поля можно перечислять модули доступные для данной роли на просмотр и редактирование. В таблице пользователей вам помимо id, login, pass, name, email понадобится поле role_id.

Админка закрыта от пользователя без прав

Шаблон админки

У админки также должен быть свой шаблон содержащий: запуск сессии, подключение к бд, meta для html и header и footer. БД – та же, что и для сайта. Напомню код подключения к БД через PDO:

    <?php
    $host = 'localhost';
    $db   = 'mysite';
    $user = 'root';
    $pass = '';
    $charset = 'utf8mb4';

    $dsn = "mysql:host=$host;dbname=$db;charset=$charset";
    $opt = [
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES   => false,
    ];
    $pdo = new PDO($dsn, $user, $pass, $opt);
    ?>

CRUD

Реализация простого но достаточно мощного инструмента по управлению контентом являются CRUD таблицы – интерфейс для работы с таблицами БД наподобие phpMyAdmin, который по сути и реализует некоторый вид административной части. CRUD – это операции create, read, update, delete по работе с отдельными записями таблицы. Визуально таблицы crud идеально представлять в виде страниц содержащих html таблицы с полями и записями с возможностью пагинации, сортировки и фильтрации.

Таблица управления товарами

Методы управления реализуются в виде форм и ссылок. Так для удаления записи достаточно сформировать ссылку вида: /admin/crud/delete?table=product&id=15. Ещё лучше сделать это с помощью js-POST запроса. Для добавления и редактирования записи используем формы с нужными полями, которые могут находиться по адресу: /admin/crud/create.php и /admin/crud/update.php. Для создания и редактирования сущности мы можем использовать одну и ту же форму, с той лишь разницей, что при редактировании поля должны заполняться текущими значениями записи из БД, и наличием скрытого поля id.

Пример формы редактирования

Для ещё большей простоты мы можем сделать не один общий crud а отдельные таблицы управления для каждой таблицы бд. Тогда они могут находиться по адресам: /admin/product/ /admin/news/. и управление осуществляться как /admin/product/view.php?page=2 для прсмотра страницы записей и /admin/product/create.php для создания записи.

Мониторинг и аналитика

Мониторинг и аналитика являются дополнительными функциями административной панели на PHP MySQL. Их основная задача заключается в предоставлении информации об активности пользователей на сайте.

Мониторинг включает в себя наблюдение за трафиком и действиями пользователей на сайте, а также за выполнением определенных задач администратором. На основе этих данных можно определить, какие страницы сайта являются наиболее популярными, каким образом пользователи взаимодействуют с элементами интерфейса, на сколько эффективны рекламные и маркетинговые кампании.

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

Чтобы смотреть статистику посещений, комментирования и другой активности, создаём в базе данных таблицу с полями:

  • ID;
  • Date;
  • Views;
  • Comments.
график статистики

В них записывается общее количество просмотров и комментариев за каждый день, которое выводится на графике. Чтобы это сделать, пропишем HTML-код таблицы:

<div class='table'>
<div class='table-wrapper'>
<div class='table-title'>Статистика</div>
<div class='table-content'>
<img src='stats.php' class='statistics-img'> <br>
Красный: просмотры <br>
Синий: комментарии <br>
 1 шаг — 1 день
</div>
</div>
</div>

В качестве источника картинки указывается PHP-файл с кодом:

<?include("includes/db.php");
$width = 400;
$height = 200;
$canv = imagecreatetruecolor($width, $height);
//Цвета
$white = imagecolorallocate($canv, 255, 255, 255);
$gray = imagecolorallocate($canv, 150, 150, 150);
$black = imagecolorallocate($canv, 0, 0, 0);
$red = imagecolorallocate($canv, 255, 0, 0);
$blue = imagecolorallocate($canv, 0, 0, 255);
imagefill($canv,0,0,$white);
//Рисуется квадрат
imagerectangle($canv, 15, 5, $width-5, $height-15, $gray);
//Горизонтальные линии
for($i = 1; $i <= 5; $i++) {
imageline($canv, 15, $height-$i*35, $width-5, $height-$i*35, $gray);
}
//Вертикальные линии
for($i = 1; $i <= 15; $i++) {
imageline($canv, 15+($i*30), 5, 15+($i*30), $height-15, $gray);
}
//Получение статистики из базы данных
$stats_result = mysqli_query($db,"SELECT * FROM statistics");
if($stats_result) {
$last_y = [0,0];
$x = 15;
//Рисуется график
while($stats = mysqli_fetch_array($stats_result)) {
imageline($canv, $x, ($height-15)-$last_y[0], $x+30, ($height-15)-($stats['views']/10), $red);
imageline($canv, $x, ($height-15)-$last_y[1], $x+30, ($height-15)-($stats['comments']/10), $blue);
$last_y[0] = $stats['views']/10;
$last_y[1] = $stats['comments']/10;
$x += 30;
}
} else {echo mysqli_error($db);}
//Вывод изображения
header("Content-type: image/png");
imagepng($canv);
//Освобождение памяти
imagedestroy($canv);
?>

Сначала создаются изображение, рамка и деления. Затем идёт запрос в базу данных, чтобы получить статистику, которая отрисовывается в виде графика. Изображение сохраняется для разового вывода, а потом удаляется. Когда пользователь обратится к статистике в следующий раз, информация будет визуализирована заново.

Задача

Напишите crud таблицу для одной из ваших таблиц БД и обработчики действий для неё.

Напишите форму фильтрации данных для crud таблицы и обработчик этой формы.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *