Оновлення OpenCart: перехід на актуальну версію без втрати магазину
Оновлення версії OpenCart між великими гілками — це не кнопка в адмінці: змінюються структура бази, система розширень і система шаблонів, тому старі модулі й стара тема на новій платформі просто не стартують. Через це питання «оновлюватися чи ні» насправді звучить інакше: що станеться з моїми модулями, темою й адресами сторінок. Ми відповідаємо на нього до початку робіт — розбираємо збірку поштучно, переносимо дані на тестовий майданчик і звіряємо кількість товарів, замовлень і клієнтів до й після. Бойовий сайт увесь цей час торгує.
тестовий майданчик, копія бойового; магазин не зупиняється
Де відбувається оновлення
звірка товарів, категорій, замовлень, клієнтів і відгуків до й після
Головна перевірка
3–5
Аудит збірки
робочих днів, безкоштовно, документ лишається у вас
правки в ядрі й доля кожного модуля, не розмір каталогу
Що рухає кошторис
оплата за етапами, гарантійний строк 30 календарних днів
Умови
Як проходить робота
Прозорі етапи з погодженням на кожному кроці
Загальний строк:15–45 днів
1
Аудит збірки
3–5 робочих днів
Знімаємо поточну версію, шукаємо правки в ядрі порівнянням із чистою збіркою, складаємо перелік модулів із долею кожного, дивимося тему й середовище. На виході — документ і дві оцінки: оновити поточний магазин або зібрати новий на актуальній версії з перенесенням даних.
2
Тестовий майданчик і перше перенесення
2–4 робочих дні
Піднімаємо копію на окремому домені, закритому від індексації, ставимо нову версію платформи, переносимо базу й перший раз рахуємо цифри. Перше перенесення майже завжди дає розбіжність — тут і стає видно, де в даних аномалії.
3
Ядро й модулі
5–15 робочих днів
Найдовший етап. Ставимо версії розширень під нову платформу, підбираємо аналоги, дописуємо власним кодом те, чому заміни немає. Правки з ядра переїжджають у модифікатори — щоб наступне оновлення не починалося з тієї самої археології.
4
Тема під нову систему шаблонів
4–10 робочих днів
Переносимо або збираємо заново головну, категорію, картку, кошик і чекаут. Звіряємо з бойовим сайтом посторінково: мета — щоб різницю було видно лише в коді, а не на екрані покупця.
5
Приймання на тестовому
3–5 робочих днів
Ви клікаєте магазин руками: замовлення від кошика до листа, оплата, доставка, адмінка, вивантаження. Паралельно проходить фінальна звірка кількостей і перевірка, що адреси сторінок збіглися з поточними.
6
Перемикання і 48 годин після
1 вечір + 2 доби спостереження
Вечір узгодженого дня: заморозка змін, останнє перенесення даних, перемикання, прохід за чек-листом. Стара збірка лишається піднятою під планом відкату. Дві доби дивимося логи помилок, замовлення, сканування й фонові задачі.
Технології та інтеграції
На чому будуємо і з чим це з’єднується
Стек
OpenCart 4.x — гілка, яку розвивають; чесне обмеження: частина українських модулів під неї досі не вийшла
OpenCart 3.x — коли критичний для вас модуль існує лише під неї, це свідома зупинка на попередній гілці
PHP 8.x, MySQL / MariaDB актуальних версій — без цього нова гілка не запуститься
OCMOD-модифікатори замість правок у файлах платформи — щоб наступне оновлення не починалося з пошуку змін
Git — щоб у будь-який момент було видно, що саме змінилося, і було куди відкотитись
Тестовий майданчик на окремому домені, закритий від індексації
Скрипти звірки кількостей до і після — саме вони, а не відчуття, підтверджують, що дані на місці
Обмеження стека: OCMOD покриває не все — окремі зміни фізично неможливо винести з ядра, і такі місця ми називаємо в документі окремим списком
Інтеграції
LiqPay
WayForPay
monobank
Нова Пошта
Укрпошта
1С / BAS
XML-фід на маркетплейси
Google Tag Manager
GA4
Google Search Console
Що входить
Повний перелік робіт і того, що ви отримуєте на виході
Піднімаємо тестовий майданчик як точну копію магазину: усі роботи йдуть там, ваш сайт увесь цей час приймає замовлення.
Переносимо дані й звіряємо цифри — товари, категорії, замовлення, клієнти, відгуки рахуються до й після, розбіжність має бути нульовою.
Розбираємо кожну правку в ядрі: потрібне бізнесу відтворюємо штатним модифікатором, від решти відмовляємося письмово, а не мовчки.
Проходимо модулі поштучно — версія під нову платформу, аналог або власний код; рішення по кожному ухвалюєте ви ще на аудиті.
Збираємо тему під нову систему шаблонів так, щоб покупець не помітив підміни: той самий вигляд, інший код під ним.
Зберігаємо адреси сторінок, а де це технічно неможливо — ставимо 301 і показуємо повний перелік до перемикання, не після.
Прогонимо весь шлях покупця на тестовому: каталог, фільтр, кошик, чекаут, оплата, доставка, лист про замовлення.
Перевіряємо обмін з обліковою системою й вивантаження на майданчики — після зміни платформи це ламається найчастіше.
Піднімаємо версію мови й бази на сервері як частину робіт: без цього нова гілка не стартує взагалі.
Перемикаємо у ваше вікно з готовим планом відкату; стара збірка лишається на місці, поки ви не приймете нову.
Тримаємо перші 48 годин під наглядом: помилки, замовлення, індексація, фонові задачі.
Умови: оплата за етапами, гарантійний строк 30 календарних днів після приймання.
Коли ця послуга не підходить
Що не входить у роботу — щоб не було сюрпризів на здачі
Ліцензії на нові версії платних модулів — купуються на вас
Редизайн: оновлення зберігає вигляд, а не змінює його
Обіцянка, що знятим із підтримки модулям знайдеться аналог
Наповнення каталогу й контентні роботи
Хостинг, домен, еквайринг
Кому підходить
Ситуації, у яких ця послуга дає результат
Ситуація 1 з 4
Хостинг попередив, що прибирає стару версію мови
Найчастіший привід — і найгірший момент, щоб починати. У виміряних нами магазинах на OpenCart 3.x ми регулярно бачимо PHP 7.3.33, версію без підтримки з грудня 2021 року. Поки провайдер її тримає, все працює; у день, коли він її вимкне, магазин віддасть білу сторінку. Оновлення в спокійному режимі й оновлення за дванадцять годин до відключення — це різні гроші й різна кількість ризику.
Розберемо вашу ситуацію на безкоштовному аудиті
Ситуація 2 з 4
Потрібен модуль, якого під вашу версію вже не випускають
Автори розширень поступово перестають підтримувати старі гілки: нова інтеграція виходить одразу під актуальну версію, а під вашу — «за запитом» або ніколи. Якщо ви вперлися в те, що потрібного платіжного чи логістичного модуля під вашу збірку не існує, оновлення платформи стає не гігієною, а умовою для конкретної бізнес-задачі.
Ситуація 3 з 4
Магазин збирали давно і правили прямо у файлах платформи
Класична спадщина: функція працює, але живе в зміненому файлі ядра. Такі правки не переїжджають самі й не видно їх з адмінки — їх знаходять порівнянням із чистою збіркою. Саме кількість цих правок, а не кількість товарів, розтягує строк від нижньої межі до верхньої.
Ситуація 4 з 4
Магазин дістався вам разом із бізнесом
Ви не знаєте ні що всередині, ні хто це збирав, ні чи є вихідники теми. У виміряному нами магазині поливу ми знайшли в темі chameleon чотири приховані посилання на сторонній домен перед закриттям body, зі стилем display:none і винесенням за екран — бекліни автора шаблону, про які власник не здогадувався. Оновлення — зручний момент, щоб побачити такі речі й вирішити, що з ними робити.
Оновити поточний магазин чи зібрати новий на актуальній версії
Чим цей варіант відрізняється від «Нова збірка з перенесенням даних»
Нова збірка з перенесенням данихНаш підхід
Що відбувається з правками в ядріне переносяться взагалі: потрібні функції формулюються заново як вимогирозбираємо поштучно й переносимо в модифікатори — довго, але логіка магазину зберігається
Модуліперелік перескладається під нову платформу — ставиться те, що є, а не те, що булоперелік лишається той самий, змінюються версії; дірки закриваємо аналогами
Темавигляд можна зробити тим самим, але на цьому етапі його зазвичай усе одно міняютьпереносимо вигляд, включно з дрібницями, до яких звик покупець
Адреси сторінокзберігаються тільки якщо це закласти в завдання; інакше потрібна карта редиректівзберігаються, це умова робіт
Коли дешевшескладальна збірка з десятками вбудованих модулів і без вихідників темизбірка близька до чистої, правок мало, модулі мають версії під нову гілку
Безкоштовний аудит збірки перед оновленням
Перед оновленням треба знати три речі: що у вас нестандартного, чи є заміна кожному модулю в новій версії й скільки правок зроблено в ядрі. Аудит відповідає саме на них.
Що міряємо
Поточна версія й спосіб її встановленняЯка збірка стоїть і чи оновлювалася вона раніше. Складальні збірки з «уже вбудованими» модулями оновлюються значно важче за чисті.
Правки в ядріСкільки файлів платформи змінено напряму. Кожна така правка не переїде сама: її треба або відтворити модифікатором, або відмовитися від неї свідомо.
Перелік модулів і їхня доляДля кожного розширення — чи є версія під нову платформу, чи є аналог, чи функцію доведеться писати заново. Це головний множник кошторису.
ШаблонЧи є вихідники теми й чи існує вона під нову версію. Між великими версіями система шаблонів змінюється, і сторонні теми часто не переносяться.
Стан бази й обсяг данихКількість товарів, замовлень і клієнтів, які треба перенести без втрат. Ці цифри звіряються до й після — це головна перевірка успіху.
СередовищеВерсія мови й бази. У виміряних нами магазинах ми регулярно бачимо PHP 7.3.33 і фронтенд на бібліотеках десятирічної давності — наприклад, збірку з jQuery 2.1.1 і третьою версією фреймворка верстки. Нова версія платформи вимагатиме сучаснішого середовища.
Що ви отримуєте на руки
Документ по збірці: версія, правки в ядрі, перелік модулів із долею кожного, стан теми.
Оцінку двома сценаріями: оновлення поточного магазину проти збірки на новій версії з перенесенням даних.
Перелік функцій, які доведеться відтворювати заново, з оцінкою по кожній.
Розмову на 30–40 хвилин по документу.
Строк: 3–5 робочих днів
Чому це безкоштовно
Бо доля кожного модуля — це і є кошторис оновлення, а перевірити її можна тільки поштучно. Документ ваш незалежно від того, робимо ми оновлення чи ні.
Що далі
Після аудиту — сума й строк по етапах, договір, рахунок, акт. Іноді з переліку модулів стає видно, що зібрати магазин заново на новій версії дешевше за оновлення старого; тоді ми покажемо обидві цифри.
Форма коротка: контакт і адреса сайту
Не знайшли свій випадок?
Опишіть, як це влаштовано у вас, — відповімо, чи підходить «Оновлення версії OpenCart» і що це означає у вашій ситуації. Без брифу й без дзвінка: одне питання, одна відповідь.
Працюємо офіційно
Договір, акт і рахунок — на кожен проєкт, а не тільки на великий. Без документів у вас немає ні прав на роботу, ні підстави провести витрати.
Договір, акт і гарантія 30 днів
На кожен проєкт письмовий договір: обсяг, строки, сума, порядок приймання. Після здачі — акт і рахунок, а далі 30 календарних днів гарантії: помилки з нашої вини усуваємо безоплатно. Усне з дзвінка дублюємо письмово того ж дня — домовленість, якої немає в тексті, не рахується.
ФОП і безготівковий розрахунок
Виконавець — зареєстрований ФОП. Оплата на рахунок із закривними документами, які бухгалтерія проведе як витрати. Курс для гривневої оплати фіксується договором, а не з’ясовується постфактум.
Права й доступи — ваші
Код, дизайн і матеріали переходять до вас після повної оплати. Домен, хостинг, репозиторій, аналітику й рекламні кабінети оформлюємо на вас — щоб сайт не залежав від підрядника. NDA підписуємо на запит, після завершення свої доступи видаляємо самі.
Портал клієнта замість переписки
На час роботи ви отримуєте доступ до порталу: договори, рахунки, акти й стан проєкту в одному місці. Документи формуються з даних угоди, тому реквізити й суми в них не розходяться, а про оплати й дедлайни нагадує система, а не пам’ять менеджера.
Замовники з Європи
Серед робіт — проєкти для Норвегії, Болгарії та Іспанії: болгарський магазин трьома мовами з кур’єрською доставкою, іспанський з оплатою карткою й переказом, норвезький сайт клініки. Це видно в портфоліо, а не тільки в описі.
Цифри, які можна перевірити
Кожен кейс у портфоліо — з посиланням на живий сайт і технічним виміром: швидкість відповіді, вага сторінки, обсяг каталогу, знайдені дефекти. Ці цифри можна зняти самому й звірити з нашими.
Спершу аудит, потім сума
Прайсу на сайті немає навмисно: обсяг тієї самої роботи у двох клієнтів відрізняється в рази, і цифра «від» нічого не пояснює. Спершу безкоштовний розбір — рахуємо ваші сторінки, дублі й швидкість, — потім називаємо суму й строк і фіксуємо їх у договорі.
Кажемо «ні», коли не впевнені
Якщо задача не наша, строк нереальний або послуга вам просто не потрібна — скажемо це першим листом, а не після передоплати. Гарантій позицій у пошуку не даємо: їх не дає ніхто, а обіцянка без механізму — це продаж, а не робота.
NDA підписуємо на запит. Після завершення співпраці наші доступи до ваших сервісів видаляємо самі й повідомляємо про це.
Що впливає на вартість
Чому дві однакові на вигляд задачі рахуються по-різному — і що саме ми міряємо на аудиті
Правки в ядріГоловний множник. Кожен змінений файл платформи треба знайти, зрозуміти, навіщо його правили, і вирішити долю: відтворити модифікатором чи прибрати. Магазин без правок і магазин із двома десятками правок мають однаковий каталог і різний строк у рази.
Доля кожного модуляРозширення з готовою версією під нову платформу — це година роботи. Розширення без аналога, функцію якого доводиться писати заново, — окремий проєкт усередині оновлення. Тому кошторис рахується по переліку модулів, а не по кількості товарів.
Тема й наявність вихідниківЄ вихідники і тема існує під нову версію — переносимо. Немає вихідників або автор теми зник — збираємо вигляд заново під нову систему шаблонів. Це та частина, де діапазон найширший.
Чистота данихКаталог із дублями, порожніми категоріями й товарами поза категоріями переносити дорожче: кожну аномалію треба розібрати, інакше вона переїде разом з усім іншим і зіпсує звірку.
Стан сервераЯкщо версію мови й бази можна підняти на поточному хостингу — це кілька годин. Якщо провайдер тримає стару збірку жорстко, до оновлення додається переїзд на інше середовище.
Чи можна заморозити зміниПоки йде робота на тестовому майданчику, кожна нова партія товарів і кожне замовлення на бойовому — це розходження між двома копіями. Домовленість про вікно тиші коштує нуль, а економить перенесення даних набіло.
Кейси
Задачі та результат у цифрах — усі показники зняті нашим виміром
магазин систем автоматичного поливу з каталогом на 300 позицій
Задача
Зафіксувати фактичний стан збірки до розмови про оновлення: що всередині, скільки даних і що доведеться відтворювати руками.
Рішення
Каталог перерахували двома незалежними методами — обхід кореневих категорій по пагінації й об'єднання видачі внутрішнього пошуку по 18 різних запитах. Далі заміри швидкості по п'яти повторах, розбір коду сторінки й заголовків сервера.
Результат
300 товарів у 40 категоріях на 4 рівнях вкладеності, обидва методи дали той самий набір ідентифікаторів — розбіжність 0%, і саме ця цифра стає контрольною після перенесення. Перша відповідь 235 мс (медіана з 5 замірів), повний HTML 262 мс, вага головної 143,6 КБ і 22,5 КБ у brotli. У чекауті 6 способів доставки від 2 перевізників і 3 способи оплати — усе це доведеться відтворювати на новій версії поштучно. Технічна збірка: OpenCart 3.x із jQuery 2.1.1 і третьою версією фреймворка верстки, тема chameleon. Окремо знайшли в темі 4 приховані посилання на сторонній домен перед закриттям body зі стилем display:none — при перезбірці теми вони не переїжджають, і це рідкісний випадок, коли оновлення прибирає проблему саме собою.
Оцінити технічний стан магазину з каталогом на понад тисячу позицій — зокрема, наскільки терміново треба міняти середовище.
Рішення
Заміри швидкості й ваги, розбір карти сайту на унікальність адрес, перевірка заголовків сервера й структурованих даних.
Результат
Середовище — PHP 7.3.33, без підтримки з грудня 2021 року: питання вже не «чи оновлювати», а «до якої дати». У карті сайту 1 300 унікальних адрес — близько 1 213 карток товару і 70 категорій — при 4 236 записах усього, тобто приблизно 3,3 дубля на адресу. Перша відповідь 625 мс, повне завантаження 752,5 мс при 350,4 КБ розмітки. Увімкнено новий протокол і суворе захищене з'єднання. Структурованих даних товару на головній немає, тег H1 відсутній. Уточнення: оновлення версії саме собою не прибере ні 3,3 дубля на адресу, ні відсутній H1 — це окремі роботи, які ми виносимо окремим рядком, а не ховаємо всередину апгрейду.
Що потрібно від вас
Без цього не почнемо — краще підготувати заздалегідь
1Доступи: адмінка, файли, база, панель хостингу.
2Перелік модулів, за які ви платите, з ліцензіями.
3Вихідники теми, якщо вони є.
4Рішення по функціях, для яких немає готової заміни: відтворювати чи відмовитися.
5Погоджене вікно перемикання.
6Одну людину з правом приймати роботи на тестовому майданчику.
Якщо чогось із цього немає — скажіть, підкажемо, як зібрати або зробимо самі окремою задачею.
Часті питання
Те, що питають найчастіше — з конкретними відповідями
чи можна оновитися однією кнопкою з адмінки?
Між дрібними версіями однієї гілки — часто так, і це нормальна гігієна. Між великими гілками — ні. Там переписані структура бази, система розширень і система шаблонів, тому старі модулі й стара тема не запускаються в принципі. Те, що прийнято називати оновленням, технічно є збіркою магазину на новій платформі з перенесенням даних і відтворенням функцій. Звідси й правило кошторису: рахуємо по переліку модулів і правок, а не по розміру каталогу.
я втрачу товари, замовлення й клієнтів?
Не повинні, і це не питання довіри, а питання цифр. Дані переносяться на тестовий майданчик, після чого рахуються товари, категорії, замовлення, клієнти й відгуки — до й після. Розбіжність має бути нульовою. Перше перенесення майже завжди дає ненуль: у виміряному магазині поливу контрольна цифра — 300 товарів у 40 категоріях, і поки на тестовому не з'явиться рівно вона, далі ми не рухаємось. Причину з'ясовуємо до перемикання, а не після.
що буде з моїми модулями?
Кожен розбирається окремо, і це найдовша частина аудиту. Є версія під нову платформу — ставимо її. Є аналог — показуємо, чим він відрізняється від звичного. Немає нічого — оцінюємо реалізацію функції власним кодом або пропонуємо від неї відмовитися. Рішення по кожному пункту ухвалюєте ви: ми бачимо трудомісткість, ви бачите, чи справді ця функція потрібна бізнесу. Ліцензії на нові версії платних розширень купуються на вас, не на підрядника.
дизайн збережеться?
Зовнішній вигляд — так, це мета робіт. Технічно ж тема часто збирається заново, бо система шаблонів між гілками інша, а сторонні теми під нову версію нерідко просто не випускались. Ми відтворюємо вигляд, а не копіюємо файли. Наша рекомендація, і на ній ми наполягаємо: не змішуйте оновлення з редизайном. Коли одночасно змінюються платформа й макети, будь-яка проблема після запуску має два можливих джерела, і розбір з'їдає більше часу, ніж обидві роботи окремо.
а якщо просто не оновлюватися?
Якщо середовище ще підтримується провайдером, магазин продає, а нових модулів вам не треба — це робочий варіант, і ми так і скажемо. Термін придатності в такого рішення все ж є: у виміряному нами магазині садового інструменту стоїть PHP 7.3.33, версія без підтримки з грудня 2021 року, і день, коли хостинг її прибере, призначає провайдер, а не ви. Різниця між плановим оновленням і аварійним — у темпі, ціні й кількості нервів.
адреси сторінок збережуться?
Так, і це умова робіт, а не побажання. Якщо при переході змінюються адреси, це вже переїзд: потрібна карта редиректів, частина позицій просідає, а відновлення розтягується на місяці. Ми зберігаємо структуру адрес, а в поодиноких місцях, де це технічно неможливо, закриваємо старі адреси 301-редиректом і показуємо перелік до перемикання. Після запуску дивимося помилки сканування в Search Console — доступ до неї потрібен саме для цього.
скільки триває і скільки магазин не працюватиме?
Роботи — 15–45 робочих днів. Простій — вечір. Нижня межа строку означає збірку без правок у ядрі й невеликий набір стандартних модулів; верхня — десятки змін у файлах платформи й платні розширення, частину функцій яких доводиться писати заново. Решта відбувається на тестовому майданчику, тому бойовий сайт торгує до останнього дня. Перемикання ставимо на найтихіший для вашого магазину вечір, а стара збірка лишається піднятою про всяк випадок.
оновлення виправить SEO-проблеми, які в мене вже є?
Ні, і обіцяти протилежне було б нечесно. Нова версія платформи не прибирає дублювання адрес, не дописує тексти й не додає структурованих даних. У виміряному магазині садового інструменту в карті сайту 4 236 записів на 1 300 унікальних адрес — близько 3,3 дубля на адресу; після оновлення їх буде рівно стільки ж, якщо не зайнятися цим окремо. Такі роботи ми виносимо окремим рядком кошторису. І одразу чесна межа: чистка дублів не додає трафіку, вона перестає його розпорошувати, а кількість сторінок в індексі якийсь час може навіть падати — це очікуваний хід подій, а не погіршення.
Надішліть доступ до адмінки й перелік модулів, за які платите.
У відповідь — документ по збірці: правки в ядрі, доля кожного модуля, стан теми і дві оцінки, оновлення проти нової збірки. Якщо оновлюватися вам зараз не варто, почуєте це першим листом.
Прайса на сайті немає навмисно: обсяг тієї самої роботи у двох клієнтів відрізняється в рази, і цифра «від» у такому разі нічого не пояснює. Спершу безкоштовний аудит — рахуємо ваші сторінки, дублі й швидкість, — потім називаємо суму й строк і фіксуємо їх у договорі.