все проекты / кейс 01

PandaSale — миграция магазина на новый движок

клиент
PandaSale, магазин настольных игр в Ростове-на-Дону
платформа
OpenCart 3 / ocStore
роль
архитектура, миграция данных, кастомная тема, модули
срок
первая половина 2026

Задача

Магазин работает с 2013 года, и сайт всё это время жил на OpenCart 1.5.4.1: движок без поддержки, привязка товаров к МойСклад по артикулу не работала для модификаций, картинки лежали на диске сервера без оптимизации. Переехать нужно было без потери SEO-позиций — ~3000 товаров и ~3000 заказов в истории.

Решение

Перенос на OpenCart 3.0.5 на чистом сервере (Nginx + PHP-FPM 8.3, MariaDB) с кастомной темой и тремя модулями: хранение картинок в Yandex Object Storage с генерацией WebP трёх размеров при сохранении товара; односторонняя синхронизация остатков и цен из МойСклад по external code — включая комплекты со связанными остатками, где продажа бустера списывает дисплей; 301-редиректы со старых URL. Оплата — Ozon Pay, фискализация 54-ФЗ на его стороне.

Результат

Новый магазин открыт на pandasale.ru: ~3000 игр в наличии, доставка по Ростову за 2 часа, бесплатная доставка от 5000 ₽ по всей России.

// до → после

движокOpenCart 1.5.4.1OpenCart 3.0.5
привязка к МойСкладпо артикулу, модификации мимопо external code
картинкидиск сервераObject Storage, WebP

Как мы это делали

Начали с дизайна: собрали макет магазина — главная, каталог, карточка товара, оформление заказа — и согласовали его целиком, до строчки кода. Дальше на основе макета написали кастомную тему OpenCart 3 с нуля, а не подгоняли покупной шаблон: так в вёрстке нет чужого наследия, а скорость страниц не упирается в лишние библиотеки.

Параллельно переносили данные: около 3000 товаров и 3000 заказов из OpenCart 1.5.4.1, с сохранением URL и 301-редиректами со старых адресов, чтобы не потерять позиции в поиске.

Затем закрыли модулями то, чего в OpenCart нет из коробки. Каждый написан под этот магазин и работает в проде.

Модули, которые мы для него написали

  • Синхронизация с МойСклад — односторонняя выгрузка остатков и цен по external code. Главное отличие от типовых решений: правильно работают модификации и комплекты со связанными остатками, когда продажа бустера списывает дисплей.
  • Облачные изображения — картинки уезжают в Yandex Object Storage, при сохранении товара автоматически создаются WebP трёх размеров. Диск сервера больше не забивается, страницы грузятся быстрее.
  • Умный AJAX-фильтр — подбор по параметрам на странице категории без перезагрузки: число игроков, возраст, время партии, цена.
  • Поиск с морфологией и ИИ — ищет с учётом словоформ и опечаток, понимает запросы вроде «игра для компании на вечер».
  • Маркетплейсы — выгрузка каталога в Ozon и Яндекс Маркет и подтягивание заказов обратно в админку.
  • Экспорт в Avito — генерация фида по требованиям площадки.
  • AI-описания товаров — черновики описаний для карточек, чтобы не писать три тысячи текстов руками.
  • Парсер поставщиков — забирает карточки товаров с сайтов поставщиков и раскладывает по полям каталога.
  • Правила игр — PDF-правила к каждому товару, файлы лежат в облаке и отдаются на карточке.
  • Хиты и новинки — витрины на главной, которые собираются автоматически по продажам и дате добавления.
  • Определение города — подставляет город покупателя и корректные условия доставки.
  • Аналитика посетителей — своя статистика в админке, без внешних счётчиков.
  • Мульти-доставка — один метод доставки, отдающий несколько вариантов с разными сроками и ценой.
  • Накопительная скидка — постоянная скидка, которая растёт от суммы покупок.
  • Менеджер изображений и менеджер категорий — инструменты для админки: массовая работа с картинками и визуальная пересборка дерева категорий.

Что это дало

Магазин работает на поддерживаемом движке, товары и остатки приезжают из МойСклад автоматически, а редактор занимается контентом, а не ручным экспортом по ночам.