Типова картина: у магазину п'ять постачальників, і кожен шле прайс у своєму форматі. Один акуратний XLSX, другий CSV із кривими роздільниками, третій взагалі дає посилання на XML-фід, який оновлюється щоночі. Менеджер щоранку сідає й вручну зводить це в одну таблицю під якийсь імпортер, а поки зводить ціни вже застаріли. Клієнт замовляє товар, якого в постачальника давно нема, ви телефонуєте вибачатися. Знайома ситуація? Тоді читайте далі.
Вбудований імпорт в Opencart як такий відсутній: у адмінці 2.x і 3.x немає жодного інструмента, який би взяв прайс постачальника і розклав товари по категоріях. Усе, що є з коробки, — це ручне створення товару в Каталог → Товари.
Модуль «Автоматична обробка прайс листів» (скорочено АОП) від розробника usergio закриває саме цю проблему. Модуль давно відомий в OpenCart-спільноті, зараз він доступний і на маркетплейсі opencartcode.com. Розберімо, що він реально вміє і де його межі.
Будь-який прайс, а не «прайс під модуль»
Перше, що відрізняє АОП від простіших імпортерів: він не вимагає приводити прайс до свого шаблону. Підтримуються XLS, XLSX, CSV, XML із довільними тегами, XML-Excel і фіди. Ви один раз показуєте модулю, в якій колонці артикул, де ціна, де залишок і далі він обробляє файл сам, хоч би скільки разів постачальник його оновлював.
Це принципова різниця. Класична помилка новачка купити дешевий імпортер, який працює лише з «правильним» файлом, а потім місяцями вручну переганяти прайси постачальників у цей формат. Уся економія часу з'їдається підготовкою файлів. АОП налаштовується під прайс, а не навпаки.
Джерела теж будь-які: файл з диска, пряме посилання, пошта, FTP. Для фідів постачальників, які оновлюються за розкладом, це критично, про це нижче, у розділі про cron.
Постачальники як логіка, а не просто список
Друга назва модуля «Постачальники» не для краси. АОП прив'язує кожен товар до конкретного постачальника, і це відкриває операції, яких у стандартному OpenCart немає в принципі:
- обнулити залишки лише одного постачальника (він поїхав у відпустку, товари чесно зникли з наявності);
- додати націнку тільки його товарам;
- видалити його асортимент цілком;
- замінити значення атрибута лише в його товарах.
На практиці найцінніша тут функція пов'язаних артикулів. Хто працює з кількома постачальниками, знає біль: той самий товар у двох прайсах іде під різними артикулами, і наївний імпорт створює дубль. Потім ці дублі розповзаються по видачі, канібалізують один одного в Google, і навести лад уже важко. АОП дозволяє прив'язати до одного товару кілька артикулів і товар оновлюється по будь-якому з них, дубль не створюється. Кількість прив'язок не обмежена.
Окремий приємний момент: при встановленні модуль додає в опції OpenCart поле «Артикул». Опції стають адресними, їх можна знаходити й оновлювати по артикулу, а ціна товару перераховується як мінімальна серед опцій.
Оновлення з хірургічною точністю
Імпортувати товар один раз це половина справи. Справжня робота починається потім, коли прайс приходить щодня і треба оновлювати вже наявні позиції, не зламавши те, що ви руками довели до пуття.
АОП працює у двох режимах одночасно: нові товари додає, наявні оновлює. І при оновленні слухається вказівок дуже дрібно: тільки ціни, тільки залишки, тільки описи, тільки головне фото або тільки додаткові, тільки атрибути. Можна дописувати текст до наявного опису зверху чи знизу, не затираючи його. Можна оновлювати лише товари, створені після певної дати.
Це той нюанс, який відрізняє інструмент практика від іграшки. Якщо ви місяць вилизували SEO-описи, а черговий імпорт перезаписав їх сирим текстом із прайсу постачальника, робота в смітнику. В АОП такий сценарій просто вимикається галочкою.
Є і вхідний фільтр: товари з нульовим залишком, небажані виробники чи категорії відсіюються ще на вході, у режимах «Виключити» або «Дозволити». А таблиці замін дозволяють на льоту виправляти назви атрибутів, опцій і виробників: модуль виводить усе, що є в прайсі, ви правите «що і на що замінити» і в магазин дані заходять уже підготовленими. Якщо у вас в атрибутах зоопарк на кшталт «Об'єм пам'яті / Обсяг пам'яті / Память», ця функція варта половини ціни модуля.
SEO не залишили на потім
Масовий імпорт без уваги до SEO — це сотні товарів із порожніми мета-тегами й url виду index.php?route=product/product&product_id=1234. АОП генерує мета-дані, ЧПУ та навіть назви файлів зображень за шаблонами, які ви задаєте самі. Те саме для категорій: якщо в прайсі є структура категорій із вкладеністю, модуль створює її в магазині разом із мета-даними.
Мов і магазинів в модулі без обмежень. Є навіть інструмент, який додає нову мову в робочий магазин «по живому», без перевстановлення.
Ціни з оглядкою на конкурентів
Функція, яку в імпортерах зустрінеш нечасто: автоматичне ціноутворення на підставі цін конкурентів. Правила задаєте ви: на гривню менше від мінімальної, на десять нижче середньої. Запобіжник вбудований і ціна не впаде нижче закупівельної з урахуванням вашої знижки від постачальника, тобто в мінус модуль вас не зажене.
Така автоматика вимагає голови на плечах. Правила варто спочатку обкатати на невеликій групі товарів і подивитися, що виходить, а вже потім пускати на весь каталог.
Cron: магазин, який веде одна людина
Гасло на сторінці модуля: «обслуговування магазину силами однієї людини» і воно тримається саме на планувальнику. Схема така: у заданий час cron забирає прайс за посиланням, з пошти або з FTP, виконує до трьох підготовчих завдань (наприклад, обнулити залишки постачальника), обробляє прайс за вашими налаштуваннями і закриває цикл шістьма фінальними завданнями: округлити ціни, додати націнку, видалити дублі фото, виставити терміни акцій. І так по кожному постачальнику окремо.
Один раз налаштували і щоранку магазин прокидається з актуальними цінами й залишками, поки ви п'єте каву. Саме так це і має працювати.
Інструменти на всі випадки
Крім основного циклу імпорт-оновлення, у модулі величезна колекція автономних інструментів, які працюють без жодного прайсу. Розробник заявляє близько трьохсот. Із того, що реально закриває щоденні болі адміністратора: знайти й замінити в назвах, описах, атрибутах; видалити з описів посилання на чужі сайти (хто тягнув описи парсингом зрозуміє); видалити дублі товарів, фото, атрибутів; вимкнути порожні категорії; конвертувати webp у jpeg і назад; м'яке видалення товарів; округлення цін до дев'ятки.
Окремо стоїть «Антиплагіатор» це генератор унікальніших описів через синоніми та випадкові вставки. Сам розробник радить користуватися обережно й тестувати спершу на кількох товарах. Приєднуюсь: масову переробку описів без вичитки я б не запускав, надто дорого потім виправляти.
Експорт і переїзд магазину
АОП вміє не лише заливати дані, а й забирати їх: 14 варіантів експорту від короткого прайсу до повного вивантаження з атрибутами, опціями, бонусами, категоріями й посиланнями на фото. Формат: таблиця або XML-фід. Є експорт замовлень, категорій і прайсів із доданою націнкою, а вбудований фільтр дозволяє вивантажити не все підряд, а зріз: по категоріях, виробниках, слову в назві, даті оновлення ціни.
Для переїзду на новий сайт це готовий транспорт: вивантажили повний прайс зі старого магазину, залили в новий тим самим модулем. До речі, якщо переїзд планується разом зі зміною хостингу то на CloudHosting міграцію OpenCart-магазину роблять безкоштовно, також це не просто хостинг, все налаштовано під продуктивну роботу Opencart.
Вимоги й обмеження: читайте до покупки
Тепер про те, що на сторінках-хвалилках зазвичай ховають дрібним шрифтом.
ionCube Loader обов'язковий. Код модуля закодований, без ionCube він не запуститься. Перед покупкою перевірте на своєму хостингу: створіть файл із phpinfo() і пошукайте ionCube у виводі. Важливий нюанс, на якому спотикаються: лоадер має відповідати версії PHP сайту. Якщо хостер дає PHP 8.3, а ionCube зібраний під 7.4 — модуль не заведеться, і це питання до хостингу, а не до модуля.
PHP: 5.6 – 8.3. Діапазон широчезний, підтримка PHP 8.3 для модуля під OpenCart 2.x/3.x це добрий знак, що код підтримується, а не покинутий.
Ліцензія. Активація по ключу, ліцензія на 2 домени, тобто бойовий сайт плюс тестовий, що чесно. Модуль звертається до сервера розробника, але якщо сервер недоступний, доповнення продовжує працювати. Це важливо: магазин не ляже через чужу інфраструктуру.
Локалізація і підтримка: українською, англійською, російською. Підтримка заявлена безлімітна.
Підсумок
АОП — це не модуль-однозадачник, а комбайн для щоденного ведення магазину: імпорт із будь-яких форматів, керовані оновлення, логіка постачальників із розв'язаною проблемою дублів, ціноутворення по конкурентах, cron-автоматизація і три сотні службових інструментів на додачу. Для магазину на OpenCart 2.x/3.x із кількома постачальниками й живим асортиментом він окупається швидко: перший же місяць без ручного зведення прайсів розставляє все по місцях.
Ціна на opencartcode.com — 39 USD за ліцензію. На тлі того, скільки коштує місяць роботи контент-менеджера, який руками зводить прайси, то це копійки.
Чек-лист перед покупкою і запуском
- Переконайтеся, що на хостингу є ionCube Loader під вашу версію PHP (
phpinfo()) - Зайдіть у демо-адмінку (demo/demo) і подивіться інтерфейс наживо
- Зберіть прайси всіх постачальників і перегляньте документацію під свої формати
- Перед першим імпортом зробіть повний бекап бази даних
- Перший прогін робіть на тестовому домені (ліцензія 2 це дозволяє)
- Налаштуйте вхідний фільтр, щоб не затягнути товари з нульовими залишками
- У налаштуваннях оновлення вимкніть перезапис полів, які ви правили вручну (описи, мета)
- Ціноутворення по конкурентах обкатайте на малій групі товарів
- Cron вмикайте лише після 2–3 успішних ручних імпортів