шаг 4 завершен

This commit is contained in:
Alisa
2026-06-04 01:30:45 +03:00
parent 62ce8c4d01
commit 238831ad3a
26 changed files with 1703 additions and 70 deletions
@@ -0,0 +1,102 @@
# Шаг 4. Каталог, роутинг и первые формы админки
## Что сделано
Добавлен базовый роутинг:
- `/` - главная;
- `/catalog` - полный каталог;
- `/catalog/{slug}` - страница категории;
- 404-страница.
Добавлены файлы:
- `app/Core/Router.php`;
- `app/Controllers/CatalogController.php`;
- `views/catalog/index.php`;
- `views/partials/product-card.php`;
- `views/pages/404.php`;
- `public/.htaccess`.
## Навигация
Каталог получил боковую навигацию по категориям:
- главное дерево категорий;
- вложенность до третьего уровня;
- подсветка текущей категории;
- липкая боковая панель на desktop;
- адаптация под мобильный вид.
Хлебные крошки и кнопка "Вернуться назад" уже работают через общий layout.
## Товары в каталоге
Каталог готов выводить опубликованные товары и фасовки.
Для страницы категории товары выбираются не только из самой категории, но и из всех вложенных подкатегорий.
Пока товаров нет, выводится понятное сообщение о будущем переносе каталога.
## Админка
Добавлены первые формы:
- `/admin/categories.php` - добавление категории/подкатегории;
- `/admin/products.php` - добавление товара с одной стартовой фасовкой.
Это первичная техническая админка без авторизации. Полноценный защищенный вход администратора нужно сделать отдельным следующим шагом.
## Атрибуты и фасовки
После сравнения со старой админкой в схему добавлена расширенная модель атрибутов:
- `attribute_groups` - группы атрибутов, например "Упаковка", "Размер рыбы", "Размер креветки", "Тип заморозки", "Происхождение";
- `attribute_values` - значения атрибутов, например "20 кг", "10 кг", "31/40", "штучная заморозка", "монолитная заморозка";
- `product_attribute_groups` - какие группы используются у конкретного товара;
- `variant_attribute_values` - какие значения выбраны у конкретной фасовки/варианта.
В `product_variants` добавлены поля:
- `code`;
- `article`;
- `volume_or_pieces`;
- `old_package_price`.
Это нужно, чтобы повторить удобную логику старой админки: один товар, несколько строк фасовок, разные цены, вес/объем/штук, код товара, артикул и дополнительные атрибуты.
Дополнительный анализ первых товаров и атрибутов вынесен в `docs/АНАЛИЗ_ПЕРВЫХ_ТОВАРОВ_И_АТРИБУТОВ.md`.
## Дополнение: сценарный каталог и рекомендации
После анализа большого списка товаров со старого сайта стало понятно, что каталог нельзя строить только как длинную ленту из 42 страниц. В ассортименте смешаны маленькие позиции для дома, семейные фасовки, крупные короба, HoReCa, премиальные деликатесы, бакалея, мясо, молочная продукция и полуфабрикаты.
В базу добавлена архитектура для умных, но управляемых рекомендаций:
- `product_segments` и `product_segment_links` - сценарные сегменты: для дома, для семьи, большая фасовка, HoReCa, премиум, к пиву, быстро приготовить, для суши и другие;
- `product_badges` и `product_badge_links` - короткие бейджи для карточек и фильтров;
- `recommendation_rules` - правила, которые можно будет контролировать из админки;
- `product_relations` - ручные и автоматические связи между товарами;
- `product_events` - события для будущего обучения: просмотры, корзина, заказ, сравнение, клики по рекомендациям.
Подробный вывод вынесен в `docs/АНАЛИЗ_КАТАЛОГА_И_РЕКОМЕНДАЦИЙ.md`.
## Дополнение: навигация, скидки и проходные цены
После проверки страниц добавлены еще три важных требования:
- дерево категорий должно раскрываться на каждом уровне, чтобы страницы вроде "Рыба" не превращались в длинное полотно;
- у фасовки должна быть скидочная модель: текущая цена, старая перечеркнутая цена, ручная установка скидки и процентная скидка с автоматическим пересчетом;
- на главной странице нужен блок "Запрос проходных цен", где покупатель сможет отправить список позиций текстом или прикрепленным файлом, а заявка уйдет администратору на почту.
В схему добавлены поля `discount_type`, `discount_percent`, используется `old_package_price`, а также таблица `price_requests` для будущих заявок проходных цен.
## Следующий шаг
Шаг 5:
1. Сделать авторизацию администратора.
2. Защитить `/admin/`.
3. Улучшить формы редактирования категорий и товаров.
4. Добавить редактирование и удаление.
5. Добавить страницу товара и корзинную заготовку.