шаг 3 завершен

This commit is contained in:
Alisa
2026-06-04 00:27:17 +03:00
parent 420e67c9bd
commit 62ce8c4d01
27 changed files with 1565 additions and 42 deletions
@@ -0,0 +1,98 @@
# План переноса товаров со старого сайта
## Цель
Перенести товары со старого сайта в новую базу без ручного копирования и без потери структуры, SEO и индексации.
## Что нужно перенести
Для каждого товара:
- название;
- старая ссылка;
- новый slug;
- категория и подкатегория;
- описание;
- краткое описание;
- информация о товаре;
- `title`;
- `description`;
- `keywords`;
- H1, если он отличается от названия;
- фото;
- фасовки;
- цены по фасовкам;
- единицы измерения;
- доступность/публикация.
Для каждой категории:
- название;
- старая ссылка;
- новый slug;
- H1;
- `title`;
- `description`;
- `keywords`;
- текст категории;
- родительская категория;
- порядок в меню.
## Возможные способы переноса
### 1. Выгрузка CSV/Excel
Лучший вариант, если старый сайт умеет выгружать товары.
Нужны отдельные колонки для категорий, фасовок, цен, SEO и старых ссылок.
### 2. Доступ к базе старого сайта
Самый точный вариант, если можно получить дамп базы или доступ к phpMyAdmin.
Можно написать миграционный PHP-скрипт, который перенесет категории, товары, фото, SEO и ссылки.
### 3. Парсинг старого сайта
Рабочий вариант, если нет выгрузки и доступа к базе.
Скрипт обходит старые URL, собирает HTML, title, description, keywords, хлебные крошки, описание, фото и цены.
Минус: зависит от верстки старого сайта, поэтому требует отдельного тестирования.
### 4. Ручной Excel-шаблон
Запасной вариант, если автоматический перенос невозможен.
Мы готовим шаблон, заполняем его товарами, затем импортируем в новую базу.
## Что уже заложено в новой базе
- `categories.legacy_path` - старый URL категории;
- `products.legacy_path` - старый URL товара;
- `categories.seo_title`;
- `categories.seo_description`;
- `categories.seo_keywords`;
- `categories.h1`;
- `products.seo_title`;
- `products.seo_description`;
- `products.seo_keywords`;
- `products.h1`;
- таблица `redirects` для 301-редиректов;
- таблица `product_images`;
- таблица `product_variants`.
## Отдельный этап работ
Перенос товаров выделяется в отдельную задачу после базовой структуры каталога и страниц.
Порядок:
1. Получить источник данных старого сайта: выгрузку, базу или список URL.
2. Сопоставить старые категории с новой структурой.
3. Подготовить импортёр.
4. Сделать тестовый импорт 10-20 товаров.
5. Проверить категории, фото, цены, фасовки, SEO и старые ссылки.
6. Запустить полный импорт.
7. Сформировать 301-редиректы.
8. Проверить выборочно страницы товаров и категорий.
+16
View File
@@ -31,6 +31,7 @@
- популярные товары;
- настройки сайта;
- праздничные/нерабочие дни.
- старые URL и 301-редиректы для сохранения индексации.
## Главная логика связей
@@ -45,6 +46,10 @@
- меню каталога;
- SEO-текст для страниц категорий.
Для переноса со старого сайта у категорий есть поле `legacy_path`. Если старый URL отличается от нового slug, старый путь нужно сохранить и добавить 301-редирект в таблицу `redirects`.
Для SEO у категорий есть поля `h1`, `seo_title`, `seo_description`, `seo_keywords`.
### Товары
Таблица `products` хранит основную карточку товара:
@@ -60,6 +65,10 @@
- доступность;
- признаки "новинка", "хит", "акция".
Для товаров также есть поле `legacy_path`, чтобы переносить старые ссылки без потери индексации.
Для SEO у товаров есть поля `h1`, `seo_title`, `seo_description`, `seo_keywords`.
### Фасовки
Таблица `product_variants` хранит отдельные фасовки товара.
@@ -106,6 +115,13 @@
Если промокод действует на весь заказ, targets не нужны.
Для отображения выгодных цен в каталоге у промокодов есть поля:
- `show_in_price_tiers` - показывать как градацию цены;
- `price_tier_label` - подпись для карточки товара.
Так можно показывать покупателю базовую цену, цену от 20 000 руб. наличными и цену от 50 000 руб. наличными.
### Доставка
Таблица `delivery_calculations` хранит результат расчета:
+107
View File
@@ -0,0 +1,107 @@
# Шаг 3. Первые PHP-классы и вывод данных
## Что сделано
Созданы первые классы для работы сайта на чистом PHP:
- `app/Controllers/HomeController.php`
- `app/Repositories/BaseRepository.php`
- `app/Repositories/CategoryRepository.php`
- `app/Repositories/ProductRepository.php`
- `app/Repositories/ProductVariantRepository.php`
- `app/Repositories/SettingRepository.php`
Главная страница больше не содержит бизнес-логику напрямую. Теперь `public/index.php` вызывает `HomeController`, а контроллер получает данные через репозитории.
Также в базовый layout добавлены:
- meta title;
- meta description;
- meta keywords;
- хлебные крошки;
- кнопка "Вернуться назад".
## Что выводится на главной
Главная страница теперь показывает:
- статус подключения к MariaDB;
- категории из таблицы `categories`, строго по дереву старого сайта;
- вложенность категорий до третьего уровня;
- каталог товаров прямо на главной странице;
- настройки доставки из таблицы `site_settings`;
- блок популярных товаров из опубликованных товаров и фасовок.
- градации выгодной цены: базовая цена, цена от 20 000 руб. наличными, цена от 50 000 руб. наличными.
Если таблицы еще не установлены, сайт не падает, а показывает сообщение с подсказкой.
## Что добавлено в админку
`admin/index.php` теперь показывает стартовую сетку разделов будущей панели:
- Товары;
- Категории;
- Фасовки;
- Заказы;
- Промокоды;
- Акции;
- Популярные товары;
- Отзывы;
- Настройки;
- Прайс-лист.
Это пока не полноценная админка, а основа навигации для следующих шагов.
## Что добавлено для цен
В `promocodes` добавлены поля:
- `show_in_price_tiers`;
- `price_tier_label`.
Создан `app/Services/PriceTierService.php`, который считает отображаемые цены для карточки товара:
- базовая цена;
- минус 5% при заказе от 20 000 руб. за наличный расчет;
- минус 7% при заказе от 50 000 руб. за наличный расчет.
Это не отменяет ввод промокода в корзине. Это только понятная подсказка в каталоге, чтобы человек заранее видел выгоду крупного заказа.
## Что нужно проверить
1. Если база еще не установлена, открыть `/install.php?token=rybstock-local-install`.
2. После установки открыть главную страницу.
3. На главной должны появиться стартовые категории из `database/seed.sql`.
4. Открыть `/admin/` и проверить стартовые разделы админки.
Стартовые категории:
- Рыба;
- Рыбное филе;
- Рыбные стейки;
- Охлажденная рыба;
- Малосольная рыба;
- Копченая рыба;
- Вяленая рыба;
- Морепродукты;
- Фрукты, овощи, ягоды, грибы;
- Икра;
- Бакалея;
- Полуфабрикаты;
- Мясная гастрономия;
- Мясо;
- Сыры;
- Молочная продукция.
Важно: названия категорий уже приведены к старому дереву. Для полного сохранения индексации еще нужны точные старые URL категорий и товаров. В схеме для этого предусмотрены `legacy_path` и таблица `redirects`.
## Следующий шаг
Шаг 4:
1. Сделать базовый роутинг для страниц сайта.
2. Создать страницу полного каталога.
3. Вывести категории и товары из базы.
4. Подготовить первые формы админки для категорий и товаров.
Перенос товаров вынесен в отдельный документ: `docs/ПЛАН_ПЕРЕНОСА_ТОВАРОВ.md`.