шаг 3 завершен
This commit is contained in:
@@ -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. Проверить выборочно страницы товаров и категорий.
|
||||
@@ -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` хранит результат расчета:
|
||||
|
||||
@@ -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`.
|
||||
Reference in New Issue
Block a user