-
Сайт с двумя страницами: главная (/) и детальный обзор (/blog/blog-name-xxx)
-
На главной странице - предпросмотр статей из базы (сортировка по убыванию даты добавления). Отображаются поля: заголовок, краткое описание и количество просмотров
-
При клике на предпросмотр - переход на страницу полной статьи с увеличением счетчика просмотров
-
Страница полной статьи отображает заголовок, полный текст и дату добавления
-
На главной странице также есть левый сайдбар с выбор количества статей на странице и фильтрами:
- по количеству просмотров
- по продукту, к которому принадлежит статья
- по дате добавления
-
Контент страницы подгружается асинхронно средствами JS без перезагрузки страницы
core логика работы приложения (controller)
\api логика работы API-запросов
\api.php общий контроллер API
\get-blog-list.api.php контроллер API-запроса списка статей для главной страницы
\get-blog.api.php контроллер API-запроса одной статьи страницы детальной информации
\init-db.api.php контроллер API-запроса для инициализации БД начальными данными и создания индексов
\pub логика для публичных страниц
\blog.php контроллер страницы с детальной информацией
\main.php контроллер главной страницы
\core.php общие функции логики и загрузка конфигурации
data данные для начальной загрузки в БД
\blog.json данные таблицы статей
\products.json данные таблицы продуктов
db классы работы с БД (model)
\blog.db.php методы работы со статьями (выборка списка, одной статьи, обновление статьи)
\db.php общий класс БД (подключение и вспомогательные функции)
\init.db.php методы начальной загрузки данных и индексации
doc документы
\Тестовое задание.docx описание тестового задания
gui пользовательский графический интерфейс
\img каталог с изображениями
\favicon.ico иконка сайта
\pub публичные страницы (view)
\blog.gui.php построение контента страницы с детальной информацией
\main.gui.php построение контента главной страницы
\scripts JS-скрипты
\blog.js скрипты для загрузки контента на странице с детальной информацией
\main.js скрипты для загрузки и фильтрации контента на главной странцие
\types.js общие типы данных
\styles таблицы стилей для отображения интерфейса браузером
\blog.css стили для страницы с детальной информацией
\main.css стили для главной страницы
\gui.php общие функции для построние графического интерфейса
\page.gui.php HTML-шаблон страницы
logs каталог с лог-файлами ошибок
src исходные файлы TypeScript
\blog.ts скрипты для загрузки контента на странице с детальной информацией
\main.ts скрипты для загрузки и фильтрации контента на главной странцие
\tsconfig.json конфигурация TypeScript-транслятора
\types.ts общие типы данных
.gitignore список файлов не включаемых в проект для загрузки на GitHub
config.php файл конфигурации: доступ к БД, кодировки и т.д.
index.php общий контроллер (точка входа в приложение)
nginx.indexbox.conf часть конфигурационного файла Nginx-сервера
readme.md файл с этим описанием
-
Первоначальная загрузка данных производится API-вызовом:
/api/init-db
При этом в БД создаётся структура таблиц, описанная в файлах/data/products.json
и/data/blog.json
. Из них же загружаются данные. Таблицы связываются внешним ключом и создаются индексы полей по которым происходит поиск и фильтрация. -
При переходе на главную страницу веб-сервер отдаёт пустую HTML-страницу с левым сайдбаром и установленным начальным положеним филдьтров
-
JS скрипт считывает состояние фильтров и, выполняя API-запрос загружает контент страницы. Аналогичная загрузка контента проиходит при изменении фильтров
-
При переходе на страницу детальной информации веб-сервер также отдаёт пустую страницу, контент которой загружается JS-скриптом