шаг 1 сделан

This commit is contained in:
Alisa
2026-06-03 23:12:10 +03:00
parent 891315780f
commit 6d7ef09c5b
21 changed files with 658 additions and 34 deletions
@@ -0,0 +1,280 @@
# Шаг 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.
Прайс должен собираться из опубликованных товаров и опубликованных фасовок. Каждая фасовка должна быть отдельной строкой, чтобы покупатель видел все цены.
## Второй шаг
Следующий шаг: спроектировать базу данных и модели проекта под чистый PHP.
Нужно подготовить:
1. Список таблиц.
2. Поля каждой таблицы.
3. Связи между таблицами.
4. Правила расчета цены фасовки.
5. Правила расчета доставки.
6. Структуру собственной админки.
7. Первичный SQL-файл `database/schema.sql`.
После второго шага можно будет создавать файловую структуру проекта и начинать код.
Файловая структура уже создана на шаге 1, поэтому на шаге 2 можно сразу перейти к SQL-схеме, таблицам и первичным PHP-моделям.
## Что нужно уточнить перед кодом
Минимально важные вопросы:
1. Есть ли файл с товарами, ценами и фасовками: Excel, CSV или другая база?
2. Есть ли фотографии товаров и склада?
3. Какой email использовать для получения заказов?
4. Есть ли логотип Рыбсток?
5. Где будет размещаться сайт: обычный хостинг, VPS, Timeweb, Beget, Reg.ru, другой вариант?
6. Нужно ли сразу делать импорт из Excel или на старте можно заносить товары через админку?
7. Какой локальный сервер удобнее использовать: Open Server Panel, Laragon или другой?