- PHP 8.1+
- MySQL 8+
- Smarty 4
- Без фреймворков
- Категории и посты (многие‑ко‑многим)
- Главная: категории с 3 последними постами
- Категория: сортировка по дате/просмотрам + пагинация
- Пост: полный контент + 3 похожих
- Страница всех постов:
/posts - Slug‑маршруты
- Базовая sanitize‑allowlist для HTML тела статьи
- Smarty‑кеширование (учет sort/page)
- Демонстрационный сидинг
public/— public rootapp/— MVC слойtemplates/— Smarty шаблоныdatabase/— схема БД и сидингdocker/— Dockerfile и связанные файлыvar/— компиляция Smarty
- PHP 8.1+
- MySQL 8+
- Composer
docker compose up -d --buildУстановить зависимости:
docker compose exec web composer installНастроить переменные окружения в .env при необходимости.
Порты на хосте задаются через APP_PORT (веб) и DB_HOST_PORT (MySQL).
Импорт схемы БД:
docker compose exec db sh -c "MYSQL_PWD=root mysql -uroot blog < /var/www/html/database/schema.sql"Сидинг:
docker compose exec web php database/clear_db.php
docker compose exec web php database/seed.phpSCSS:
# watch
docker compose up sass
# build once
docker compose run --rm sass /sass:/cssНастроить параметры подключения в app/Config/config.php при необходимости.
Открыть в браузере:
/posts/category/{slug}/post/{slug}