122 lines
8.1 KiB
Markdown
122 lines
8.1 KiB
Markdown
# Шаг 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` для будущих заявок проходных цен.
|
||
|
||
## Дополнение: главная страница и ценовые градации
|
||
|
||
На главную добавлены требования к рабочей витрине:
|
||
|
||
- видимое главное меню: Главная, Каталог, Доставка, Контакты, Корзина;
|
||
- контактный телефон: +7-977-736-33-63;
|
||
- пункт самовывоза: г. Москва, ул. Привольная, д. 13к1;
|
||
- первый баннер: "Рыбсток - рыба, морепродукты, мясо, сыры, бакалея. Интернет-склад качественной продукции по стоковым ценам";
|
||
- баннеры: бесплатная доставка внутри МКАД от 5000 руб., бесплатная доставка за МКАД от 10000 руб., можно приобрести день в день, без предоплаты;
|
||
- заметное размещение промокодов;
|
||
- блок будущей заявки "Запрос проходных цен".
|
||
|
||
Ценовых градаций теперь четыре:
|
||
|
||
- базовая цена;
|
||
- наличный расчет от 20 000 руб. - скидка 5%;
|
||
- наличный расчет от 50 000 руб. - скидка 7%;
|
||
- безналичный расчет - +8%.
|
||
|
||
## Следующий шаг
|
||
|
||
Шаг 5:
|
||
|
||
1. Сделать авторизацию администратора.
|
||
2. Защитить `/admin/`.
|
||
3. Улучшить формы редактирования категорий и товаров.
|
||
4. Добавить редактирование и удаление.
|
||
5. Добавить страницу товара и корзинную заготовку.
|