шаг 1 сделан
This commit is contained in:
@@ -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 или другой?
|
||||
Reference in New Issue
Block a user