# Шаг 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. Добавить страницу товара и корзинную заготовку.