Files
new.rybstock.ru/ШАГ_1_ТЕХНИЧЕСКОЕ_РЕШЕНИЕ.md
T
2026-06-03 23:12:10 +03:00

281 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Шаг 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 или другой?