За 10 лет работы я перенес более 30 интернет-магазинов между различными платформами. Один из самых сложных, но интересных кейсов, переход с OpenCart на Webasyst Shop-Script. Почему клиенты выбирают Shop-Script? Чаще всего из-за гибкой системы прав доступа, встроенного CRM и удобства управления мультимагазинами. Но главный страх владельцев, это потеря трафика и позиций в поисковиках. В этой статье я подробно разберу, как провести перенос без ошибок, с примерами кода, таблицами сравнения инструментов и личными лайфхаками.
Подготовка к переносу: с чего начать?
Перед переносом важно провести аудит текущего магазина. Вот мой чек-лист:
- Резервное копирование:
- База данных OpenCart (использую
mysqldump
или плагин Backup Pro). - Файлы шаблонов и изображений (рекомендую Duplicati для инкрементных бэкапов).
- База данных OpenCart (использую
- Анализ структуры:
- Сравните типы полей товаров в OpenCart и Shop-Script. Например, в OpenCart есть «Опции», а в Webasyst — «Фичи».
- Проверьте связи: категории, производители, атрибуты.
- Планирование этапов:
- Перенос товаров → Клиенты → Заказы → Настройки SEO → Тестирование.
Перенос каталогов товаров
Основная проблема — разная структура баз данных. Приведу пример таблиц:
OpenCart:
TABLE oc_product ( product_id INT, model VARCHAR(64), sku VARCHAR(64), quantity INT, ... );
Webasyst Shop-Script:
TABLE shop_product ( id INT, name VARCHAR(255), sku VARCHAR(64), count INT, ... );
Решение:
- Экспортируем данные из OpenCart в CSV с помощью скрипта:
// export_opencart.php $products = $db->query("SELECT * FROM oc_product"); $csv = fopen('products.csv', 'w'); foreach ($products as $product) { fputcsv($csv, [ 'name' => $product['model'], 'sku' => $product['sku'], 'stock' => $product['quantity'] ]); }
- Импортируем в Shop-Script через консольный скрипт:
// import_webasyst.php $csv = fopen('products.csv', 'r'); while ($row = fgetcsv($csv)) { $product = new shopProduct(); $product->name = $row['name']; $product->sku = $row['sku']; $product->save(); }
Для сложных случаев (например, перенос опций) используйте API Shop-Script.
Интеграция платежных систем: Robokassa, ЮКассы
В OpenCart платежные модули устанавливаются через админку, в Webasyst требуется написать небольшой плагин.
Пример кода для Robokassa в Shop-Script:
class robokassaPayment extends waPayment { public function allowedCurrency() { return 'RUB'; } protected function callbackHandler($data) { if ($this->verifySign($data)) { $order_id = $data['InvId']; $this->appPayment(self::CALLBACK_PAYMENT, $data); return array('result' => 'OK'); } } }
Важно:
- Тестируйте в режиме песочницы.
- Настройте автоматическое обновление статусов заказов через Cron.
SEO: как сохранить позиции после переезда
По моему опыту, 70% ошибок при переносе связаны с SEO. Вот план:
- Редиректы 301:
Если в OpenCart был ЧПУ/product/iphone
, а в Webasyst/iphone/p1234
, добавьте в.htaccess
:RedirectMatch 301 ^/product/(.*)$ /$1/p1234
- Сохранение мета-тегов:
Экспортируйте title и description из OpenCart и импортируйте через SQL:UPDATE shop_product SET meta_title = '...' WHERE id = 123;
Сравнение инструментов для переноса: что выбрать?
Инструмент | Плюсы | Минусы | Стоимость |
---|---|---|---|
Cart2Cart | Автоматизация, поддержка | Цена (от $299) | Дорого |
CMS2CMS | Быстрый старт | Ограниченные поля | От $199 |
Самописный скрипт | Полный контроль | Требует времени | Бесплатно |
Для небольших магазинов (до 1000 товаров) пишу скрипты сам. Для крупных — Cart2Cart.
Рекомендации для разработчиков
- Тестируйте на копии. Никогда не работайте с живым сайтом.
- Договоритесь о downtime. Предупредите клиентов о технических работах.
- Проверьте скорость. Shop-Script требует оптимизации MySQL. Установите индекс для
shop_product.sku
.
Перенос с OpenCart на Shop-Script задача выполнимая, если подойти к ней системно. Главное не спешить, тестировать каждый этап и не забывать про SEO. Если остались вопросы, пишите в комментариях, помогу!