Оновлення з 2.x до 3.0

Ця інструкція призначена для наявних магазинів на ocStore (OpenCart) версій 2.x, які потрібно оновити до ocStore 3.0.4.1 зі збереженням товарів, замовлень, клієнтів і налаштувань. Для нового магазину скористайтеся інструкцією Встановлення.

Спершу — резервна копія

Оновлення змінює структуру бази даних і файли магазину, і відкотити його без резервної копії неможливо. Не починайте, доки не матимете повної копії бази даних і всіх файлів. Найкраще спершу провести оновлення на тестовій копії сайту.

Версії 1.5.x

Пряме оновлення з 1.5.x до 3.0 офіційно не підтримується. Для таких магазинів зазвичай простіше встановити ocStore 3.0.4.1 начисто й перенести дані (товари, категорії, клієнтів, замовлення) окремими інструментами. За допомогою зверніться на форум спільноти OpenCartForum.

Що зміниться після оновлення#

Щоб оцінити обсяг робіт, врахуйте основні відмінності 3.0 від 2.x:

  • Шаблони — тільки Twig (.twig). Теми 2.x (.tpl) у 3.0 не працюють і потребують перенесення (див. Перенесення теми з 2.3 на 3.0).
  • Доповнення 2.x зазвичай несумісні з 3.0: змінилися шляхи (extension/<тип>/), назви налаштувань, токен адмінки (user_token замість token). Потрібні версії доповнень саме для 3.0.
  • Налаштування доповнень у 3.0 мають префікс типу: наприклад, payment_cod_status замість cod_status, total_sub_total_status замість sub_total_status.
  • Модифікатори OCMOD під час оновлення вимикаються всі без винятку.
  • SEO URL переносяться з таблиці oc_url_alias у нову таблицю oc_seo_url.
  • Партнери (affiliates) об'єднуються з покупцями: окремі облікові записи партнерів стають обліковими записами клієнтів із партнерським профілем.
  • Сховище system/storage/ (кеш, журнали, сесії, завантаження, модифікації, бібліотеки Composer) — шляхи до нього скрипт оновлення сам пропише в config.php.
  • Коди мов переводяться у формат 3.0: ua → uk-ua, en → en-gb.

Вимоги до сервера#

Перевірте сервер до початку оновлення (повний перелік — у розділі Системні вимоги).

Компонент Вимога ocStore 3.0.4.1
PHP 8.1 або 8.2 (рекомендовано). Ядро та інсталятор формально перевіряють лише PHP 7.3+, але бібліотеки Composer, що входять до комплекту (зокрема Twig 3), вимагають PHP 8.1 або новіше.
База даних MySQL або MariaDB (драйвер MySQLi).
Розширення PHP cURL, GD, OpenSSL, Zlib, Zip, mbstring або iconv, DOM, Hash, XMLWriter, JSON, MySQLi.
Налаштування PHP file_uploads = On, session.auto_start = Off.
Версія PHP і стара версія магазину

Магазини на 2.x зазвичай працюють на PHP 5.6–7.x і на PHP 8 не запускаються. Тому версію PHP у панелі хостингу перемикайте після завантаження нових файлів, безпосередньо перед запуском скрипту оновлення (крок 5). Якщо на PHP нижче 8.1 ви побачите повідомлення Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0" — це саме воно.

Підготовка#

  1. Перевірте доповнення. Складіть перелік встановлених модулів, способів оплати й доставки, модифікаторів. Для кожного з'ясуйте в розробника, чи є версія для ocStore 3.0. Несумісні доповнення після оновлення доведеться замінити.
  2. Перемкніть тему на стандартну. У старій адмінці виберіть стандартну тему магазину. Власну тему ви перенесете пізніше, окремо.
  3. Вимкніть сторонні доповнення й модифікатори (OCMOD, vQmod).
  4. Створіть резервну копію бази даних. Скористайтеся розділом резервного копіювання в адмінці (Система → Обслуговування) або, для великих баз, phpMyAdmin чи mysqldump.
  5. Створіть резервну копію файлів — заархівуйте всю теку магазину через файловий менеджер хостинг-панелі або скопіюйте її через FTP. Окремо збережіть config.php та admin/config.php.

Покрокове оновлення#

Крок 1. Завантажте ocStore 3.0.4.1#

Завантажте архів ocStore 3.0.4.1 зі сторінки збірки на OpenCartForum і розпакуйте його на комп'ютері. Файли магазину знаходяться в теці upload/.

Крок 2. Приберіть старі шаблони#

Збережіть резервні копії та видаліть файли шаблонів .tpl стандартної теми (catalog/view/theme/default/template/) і адмінки (admin/view/template/). У 3.0 вони не використовуються, а їх видалення спрощує пошук «залишків» старої версії.

Крок 3. Завантажте нові файли поверх старих#

Завантажте вміст теки upload/ на сервер поверх наявних файлів магазину.

  • Не перезаписуйте config.php та admin/config.php. В архіві ocStore замість них є лише config-dist.php і admin/config-dist.php — не перейменовуйте їх під час оновлення.
  • Обов'язково завантажте нову теку system/storage/vendor/ — у ній бібліотеки, без яких 3.0 не працює (зокрема шаблонізатор Twig).
  • Якщо тека адмінки була перейменована, завантажте вміст нової admin/ у вашу перейменовану теку.
Сховище за межами кореня сайту

Якщо ви раніше перенесли storage за межі кореня сайту, файли з upload/system/storage/ (насамперед vendor/) потрібно скопіювати у фактичне розташування сховища, вказане в константі DIR_STORAGE у config.php. Інакше магазин працюватиме зі старими бібліотеками й завершуватиметься фатальною помилкою.

Крок 4. Перевірте права на запис#

Під час оновлення скрипт дописує в config.php та admin/config.php нові константи (шляхи до сховища тощо), тому ці файли мають бути доступні для запису. Також потрібні права на запис для тек image/, image/cache/, image/catalog/ і підтек system/storage/ (cache/, logs/, download/, upload/, modification/, session/).

Крок 5. Перемкніть PHP і запустіть скрипт оновлення#

  1. У панелі хостингу встановіть для сайту PHP 8.1 або 8.2.
  2. Відкрийте в браузері https://ваш-магазин/install/ (якщо магазин у підтеці — https://ваш-магазин/підтека/install/).
  3. Інсталятор побачить заповнений config.php і автоматично відкриє сторінку Оновлення.
  4. Натисніть Продовжити. Скрипт по черзі застосує всі патчі бази даних; під смугою прогресу з'являтимуться повідомлення на кшталт «Патч 1003 застосовано (4 з 11)». Наприкінці з'явиться повідомлення про успішне оновлення.
Відкрилося встановлення замість оновлення

Якщо замість сторінки оновлення ви бачите майстер нового встановлення, файл config.php порожній або перезаписаний. Не продовжуйте встановлення — це створить порожній магазин. Відновіть config.php і admin/config.php з резервної копії й відкрийте /install/ знову.

Якщо на якомусь патчі з'явилася помилка, зупиніться, збережіть її текст і зверніться на форум OpenCartForum до продовження робіт.

Крок 6. Видаліть теку install#

Після успішного оновлення видаліть теку install/ із сервера. Доки вона існує, адмінка показуватиме попередження.

Обов'язкові дії після оновлення#

Ці дії вказано й на сторінці оновлення. Не пропускайте їх.

  1. Очистіть cookie браузера для домену магазину, щоб уникнути помилок токена під час входу в адмінку.
  2. Увійдіть в адмінку й кілька разів натисніть Ctrl+F5 (або Ctrl+Shift+R), щоб браузер завантажив нові стилі й скрипти.
  3. Оновіть права адміністраторів. Відкрийте Система → Користувачі → Групи користувачів, відредагуйте групу адміністраторів, у списках Дозволено перегляд і Дозволено редагування натисніть Виділити все й збережіть. Без цього нові розділи 3.0 відкриватимуться зі сторінкою «Доступ заборонений».
  4. Увімкніть тему. Відкрийте Доповнення → Доповнення, виберіть тип Шаблони, активуйте (за потреби) й відредагуйте «Шаблон за замовчуванням»: перевірте Директорію шаблона (default), встановіть статус «Включено» та збережіть. Якщо пропустити цей крок, вітрина покаже помилку Error: A theme has not been assigned to this store!.
  5. Збережіть налаштування магазину. Відкрийте Система → Налаштування, відредагуйте магазин, перевірте всі вкладки (зокрема поле Шаблон на вкладці Загальні), заповніть порожні поля й натисніть Зберегти — навіть якщо нічого не змінювали. Так у базу запишуться нові параметри 3.0.
  6. Налаштуйте доповнення заново. Скрипт оновлення не перейменовує ключі налаштувань доповнень, тому способи оплати, доставки, «Враховувати в замовленні» (підсумки) та модулі після оновлення можуть виглядати вимкненими. Відкрийте кожне потрібне доповнення в Доповнення → Доповнення, перевірте налаштування й збережіть. Особливо перевірте тип Враховувати в замовленні (сума, доставка, податки, разом) — без увімкнених підсумків кошик і оформлення замовлення працюватимуть некоректно.
  7. Модифікатори. Відкрийте Доповнення → Модифікатори: усі модифікатори вимкнено. Видаліть несумісні, встановіть версії для 3.0, увімкніть потрібні й натисніть Оновити (див. Система модифікацій OCMOD).
  8. Очистіть кеш. Панель стану → кнопка з шестернею («Налаштування розробника») — очистіть кеш шаблонів і системний кеш.
  9. Перевірте вітрину. Відкрийте магазин, натисніть Ctrl+F5 кілька разів і пройдіть основні сценарії: категорія, товар, пошук, кошик, оформлення замовлення, реєстрація, вхід в особистий кабінет.

Додаткові перевірки#

  • SEO URL. Ключові слова з oc_url_alias переносяться для основного магазину й мови за замовчуванням. Для інших мов задайте SEO-адреси вручну в Дизайн → SEO URL (див. SEO URL). Також звірте свій .htaccess із новим .htaccess.txt з архіву 3.0.4.1.
  • Сховище. Після першого входу ocStore запропонує перенести теку storage за межі кореня сайту — зробіть це (див. Встановлення).
  • Журнал помилок. Перегляньте Система → Обслуговування → Журнал помилок після проходження сценаріїв на вітрині.
  • Тема. Переносьте власну тему на тестовій копії за інструкцією Перенесення теми з 2.3 на 3.0.
  • vQmod. ocStore 3.0 використовує OCMOD. Якщо ви все ж користуєтеся vQmod, встановіть його версію, сумісну з OpenCart 3.0, повторно запустіть його інсталятор і перевірте журнал vQmod. Скрипти vQmod, написані для 2.x, найімовірніше, потребуватимуть оновлення.

Типові проблеми#

Фатальна помилка «Class "Twig_Loader_Array" not found» або подібна після оновлення

У кеші модифікацій лишилися змінені копії файлів зі старої версії. Видаліть усе з теки storage/modification/, крім index.html (через FTP або кнопкою Очистити в Доповнення → Модифікатори), і знову натисніть Оновити. Також переконайтеся, що нова тека vendor/ завантажена саме в те сховище, на яке вказує DIR_STORAGE.

Білий екран або помилка 500

Перевірте версію PHP (потрібна 8.1 або 8.2) і журнал помилок вебсервера. Тимчасово можна ввімкнути виведення помилок: у файлі system/config/default.php встановіть $_['error_display'] = true;. Після діагностики обов'язково поверніть false.

«Error: A theme has not been assigned to this store!»

Тему не активовано в налаштуваннях 3.0. Виконайте кроки 4 і 5 з розділу «Обов'язкові дії після оновлення».

В адмінці «Доступ заборонений» до нових розділів

Права групи адміністраторів не містять нових маршрутів 3.0. Виконайте крок 3 з розділу «Обов'язкові дії після оновлення».

Після входу в адмінку одразу викидає назад або з'являється помилка токена

Очистіть cookie браузера для домену магазину та увійдіть знову. Посилання й закладки зі старим параметром token= у 3.0 не працюють — використовуйте нові посилання з user_token=.

У кошику немає суми чи способів доставки та оплати

Налаштування доповнень 2.x не підхопилися. Відкрийте відповідні доповнення в Доповнення → Доповнення (типи «Враховувати в замовленні», «Доставка», «Оплата»), перевірте параметри й збережіть кожне.

Якщо проблему пов'язано зі стороннім доповненням — зверніться до його автора по версію для 3.0. Про помилки самої збірки повідомляйте в офіційній темі ocStore 3.0.4.1 на OpenCartForum: перегляньте її одразу після оновлення — можливо, рішення вже опубліковано.