# Шаг 1. Техническое решение для сайта Рыбсток ## Решение Проект Рыбсток делаем на чистом PHP без фреймворка. Базовая связка: - Backend: чистый PHP 8.2+ или PHP 8.3+ - База данных: MySQL или MariaDB - Доступ к базе: PDO - Frontend: HTML, CSS, JavaScript - Админка: собственная админ-панель на PHP - Шаблоны: обычные PHP-шаблоны - Поиск на первом этапе: SQL-поиск с нормализацией русских слов и словарем синонимов - Поиск на расширенном этапе: отдельный поисковый индекс или внешний движок, если понадобится - Excel-выгрузка: CSV на первом этапе, XLSX через PHP-библиотеку или ручную генерацию позже - Карты и адреса: Яндекс.Карты / Яндекс Геокодер / Яндекс Маршрутизация - Email: SMTP-почта домена или внешний SMTP-сервис ## Почему чистый PHP подходит Чистый PHP подходит, если важны: - быстрый запуск на обычном хостинге; - понятный код без тяжелого фреймворка; - простая передача проекта другому программисту; - полный контроль над логикой фасовок, корзины, доставки и админки; - минимум зависимостей; - возможность быстро править проект вручную. Важно: чистый PHP нужно писать структурно. Даже без фреймворка проект должен иметь понятные слои: маршруты, контроллеры, модели/репозитории, сервисы, шаблоны и админку. Иначе большой каталог, фасовки, промокоды и доставка быстро станут трудными для поддержки. ## Что сейчас есть в папке проекта В папке проекта создан стартовый каркас: - `.git` - `.vscode` - `ПЛАН_ДЕЙСТВИЙ_РЫБСТОК.md` - `ШАГ_1_ТЕХНИЧЕСКОЕ_РЕШЕНИЕ.md` - `.env` - `.env.example` - `.gitignore` - `README.md` - `public/index.php` - `public/assets/css/app.css` - `app/bootstrap.php` - `app/helpers.php` - `app/Core/Env.php` - `app/Core/Database.php` - `app/Core/View.php` - `views/layouts/main.php` - `views/pages/home.php` - `admin/index.php` - `database/schema.sql` - `storage/` - `docs/` В `.env` внесены данные подключения к базе MariaDB. Сам файл закрыт от git через `.gitignore`. ## Что нужно установить для разработки На рабочем компьютере должны быть доступны: - PHP 8.2 или новее, лучше PHP 8.3 - MySQL или MariaDB - Веб-сервер: Apache или Nginx - Git Желательно: - Open Server Panel, Laragon или другой локальный сервер для Windows - phpMyAdmin или Adminer для работы с базой - Composer только по желанию, если позже захотим подключить готовые библиотеки для SMTP, Excel или dotenv Для чистого PHP Composer не обязателен на старте. ## Рекомендуемая структура проекта ```text loveriba.ru/ app/ Config/ Controllers/ Core/ Models/ Repositories/ Services/ Validators/ admin/ controllers/ views/ public/ assets/ css/ js/ images/ index.php storage/ uploads/ exports/ logs/ views/ layouts/ pages/ product/ catalog/ cart/ checkout/ emails/ database/ migrations/ seeders/ schema.sql docs/ .env.example README.md ``` ## Основные модули - `Products` - товары - `ProductVariants` - фасовки и цены - `Categories` - категории и подкатегории - `Cart` - корзина - `Checkout` - оформление заказа - `Orders` - заказы - `Promocodes` - промокоды и ограничения - `Delivery` - расчет доставки - `CustomerAccess` - вход по email-коду и история заказов - `CompareList` - список сравнения до 10 товаров - `Search` - поиск и голосовой ввод - `Reviews` - отзывы и рейтинг - `PriceExport` - прайс-лист - `AdminSettings` - настройки сайта, писем, доставки, счетчиков ## Базовая структура базы данных На втором шаге нужно спроектировать таблицы: - `admins` - администраторы - `categories` - `products` - `product_variants` - `orders` - `order_items` - `promocodes` - `promocode_targets` - `customer_login_codes` - `reviews` - `site_settings` - `popular_products` - `promo_blocks` - `delivery_calculations` - `product_images` - `product_search_terms` ## Важные технические решения ### Фасовки Фасовка должна быть отдельной таблицей, а не просто текстовым полем товара. Это важно, потому что у каждой фасовки своя цена, шаг количества, единица измерения и отображение в корзине. Пример: - товар: горбуша неразделанная; - фасовка: пласт 10 кг; - базовая единица: кг; - цена за кг: 600 руб.; - цена фасовки: 6000 руб.; - шаг количества: 10 кг. ### Корзина Корзина должна хранить не просто товар, а конкретную фасовку товара. Пример позиции: - `product_id` - `variant_id` - название товара - название фасовки - количество - шаг количества - цена за единицу - цена за фасовку - итог ### Заказы Заказ должен сохранять снимок данных на момент оформления: - название товара; - выбранная фасовка; - цена; - количество; - итог; - расчет доставки; - примененный промокод. Это нужно, чтобы изменение цены в каталоге не ломало старые заказы. ### Доставка Расчет доставки делаем отдельным PHP-сервисом `DeliveryCalculator`. Он принимает: - тип получения; - адрес; - сумму заказа; - расстояние от МКАД; - признак подъема. И возвращает: - стоимость доставки; - порог бесплатной доставки; - текстовое объяснение для клиента; - технические данные для заказа. ### Админка Админка должна быть собственной, без лишних плагинов. Минимальные разделы: - товары; - категории; - фасовки; - заказы; - промокоды; - акции; - популярные товары; - отзывы; - настройки доставки; - настройки писем; - прайс-лист; - страницы и тексты сайта. ### Email вместо SMS Все коды входа и письма отправляются только на email. SMS не используются. ### Прайс-лист На первом этапе можно сделать выгрузку CSV, который открывается в Excel. Если нужен именно `.xlsx`, подключим отдельную библиотеку или сделаем генератор XLSX. Прайс должен собираться из опубликованных товаров и опубликованных фасовок. Каждая фасовка должна быть отдельной строкой, чтобы покупатель видел все цены. ## Второй шаг Второй шаг выполнен: база данных спроектирована в файле `database/schema.sql`, стартовые данные добавлены в `database/seed.sql`, описание связей создано в `docs/ШАГ_2_БАЗА_ДАННЫХ.md`. Подготовлено: 1. Список таблиц. 2. Поля каждой таблицы. 3. Связи между таблицами. 4. Правила расчета цены фасовки. 5. Правила расчета доставки. 6. Первичный SQL-файл `database/schema.sql`. 7. Стартовые данные `database/seed.sql`. Следующий шаг: сделать применение SQL-схемы и первичные PHP-классы для чтения данных. ## Что нужно уточнить перед кодом Минимально важные вопросы: 1. Есть ли файл с товарами, ценами и фасовками: Excel, CSV или другая база? 2. Есть ли фотографии товаров и склада? 3. Какой email использовать для получения заказов? 4. Есть ли логотип Рыбсток? 5. Где будет размещаться сайт: обычный хостинг, VPS, Timeweb, Beget, Reg.ru, другой вариант? 6. Нужно ли сразу делать импорт из Excel или на старте можно заносить товары через админку? 7. Какой локальный сервер удобнее использовать: Open Server Panel, Laragon или другой?