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

10 KiB
Raw Blame History

Шаг 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 не обязателен на старте.

Рекомендуемая структура проекта

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 или другой?