
Shared Stock для OpenCart — один залишок для кількох товарів і значень опцій без перепродажу
Модуль для OpenCart 4, 3 і 2.3, який продає одну фізичну річ з одного залишку, хоч би де вона стояла: окремим товаром, значенням опції в кількох списках подарункового набору («Смак 1…5: Ваніль») чи в іншому наборі. Кошик перевіряється по пулу загалом, «Купити» відмовляє з кількістю, що лишилась, а два покупці, які в ту саму секунду підтверджують останні одиниці, не отримають їх обидва. Базова версія безкоштовна; Pro — упаковки, історія з CSV, листи «мало» і «закінчився». Ліцензія назавжди.
- Сумісність
- OpenCart 4.0.2 – 4.1.x (перевірено на 4.1.0.3 з драйвером pdo і 4.0.2.3), 3.0.x (перевірено на 3.0.5.0) і 2.3.0.2 (PHP 7.0) · штатний чекаут і наш One Page Checkout · MySQL / MariaDB · мови модуля: українська, англійська, російська
- Версія
-
v1.0.1 (OpenCart 4)
v1.0.1 (OpenCart 3.x)
v1.0.1 (OpenCart 2.3) - Ліцензія
- один сайт, назавжди
- Тріал
- 7 днів, без картки, один на сайт
Що є в Free,
а що дає Pro
Безкоштовна версія працює без обмеження в часі. Pro додає решту функцій з таблиці.
Головне про модуль
Як це виглядає для покупця
Покупець обирає смаки в наборі й натискає «Купити». Якщо разом з тим, що вже лежить у кошику, пулу не вистачає, OpenCart не додає товар, а над кнопкою з’являється зрозуміле речення: скільки ще лишилось або що все вже в кошику.
Що перевірено, а що ні
Перевірено локально на чотирьох версіях OpenCart: 79 перевірок на OpenCart 4.1.0.3 і 4.0.2.3 і по 77 на 3.0.5.0 і 2.3.0.2 за основним сценарієм, плюс окремі прогони в браузері, з One Page Checkout, правки замовлень, імпорту й листів Pro.

Тріал стартує, коли ви попросите
Свіжий інстал — безкоштовна версія, нічого не вмикається само. Кнопка «Спробувати Pro 7 днів» → e-mail → ключ одразу у вікні і листом.

Один ключ — один сайт
Переносите магазин — відв’яжіть ліцензію на старому домені й активуйте на новому самі. Для студій — ключі на 5, 25 сайтів або без обмежень.
Технічні вимоги
OpenCart 4.0.2.0+ і 4.1.x (перевірено на 4.1.0.3 і 4.0.2.3), 3.x (перевірено на 3.0.5.0) або 2.3.0.2.
PHP 7.0+ — той, що потрібен вашій версії OpenCart (перевірено на 7.0, 8.1, 8.2 і 8.3).
База MySQL або MariaDB: замок між чекаутами — іменований замок MySQL (GET_LOCK). Перевірено на MariaDB 10.11. На кластері Galera такий замок не діє між вузлами.
«Оформлення без наявності» в налаштуваннях OpenCart має бути вимкнене — інакше OpenCart не перевіряє залишок на чекауті, і модуль теж не відмовляє.
Пошта магазину налаштована (System → Settings → Mail) — для листів Pro.
Мови модуля: українська, англійська, російська.
Разом з Shared Stock для OpenCart купують
4 модулі одним замовленням — на 40% дешевше, ніж окремо


Nova Poshta Premium — модуль Нова Пошта для OpenCart 2.3, 3.x і 4.x

LiqPay — оплата карткою для OpenCart 2.3, 3.x і 4.x

Telegram-сповіщення і Viber/SMS покупцям для OpenCart
Повний опис модуля
Shared Stock для OpenCart — модуль від студії CatCode для магазину, який продає одну фізичну річ у кількох місцях каталогу. Батончик «Ваніль» окремо — і той самий смак у подарунковому наборі, де покупець обирає смак у п’яти списках «Смак 1…5». Той самий товар в іншому наборі. OpenCart рахує залишок кожного товару і кожного значення опції окремо, тож власник магазину переписує цифри вручну — і все одно продає останню одиницю двічі.
Shared Stock об’єднує такі місця в пул — одну цифру залишку, з якої продають усі вони. Учасником пулу може бути товар цілком або окреме значення опції. Кошик перевіряється по пулу загалом: набір із п’ятьма «Ваніль» у кількості 2 бере з пулу 10. Продаж будь-якого учасника знімає з пулу, а кожен учасник показує, скільки пул ще може покрити. Два покупці, які в ту саму секунду підтверджують останні одиниці, не отримають їх обидва.
Це не дубль Option Combinations. Option Combinations веде залишок комбінацій опцій усередині одного товару (розмір × колір). Shared Stock розв’язує інший сценарій: один залишок для різних товарів і значень опцій — той самий смак окремим товаром, у п’яти списках набору й в іншому наборі. Перший модуль не ділить залишок між товарами, другий не веде комбінацій усередині товару.
Як це виглядає для покупця
Покупець обирає смаки в наборі й натискає «Купити». Якщо разом з тим, що вже лежить у кошику, пулу не вистачає, OpenCart не додає товар, а над кнопкою з’являється зрозуміле речення: скільки ще лишилось або що все вже в кошику. Значення, яке пул уже не може покрити, зникає зі списку опцій, як звичайне «немає в наявності».
Якщо пул зменшився, поки товар лежав у кошику (інший покупець встиг купити), кошик позначає рядок *** і не пускає до оформлення — це штатна поведінка OpenCart для залишку, тільки рахується вона по пулу.
Що отримує адмін
- Каталог → Спільний залишок: пули із залишком, утриманим непідтвердженими замовленнями, і доступним; створення пулу. Порожній новий пул бере залишок першого доданого учасника.
- Сторінка пулу: «Додати / списати (±N)» відносно поточного — поставка, оформлена під час замовлень, не загубиться; «Встановити» для інвентаризації; поріг листа (Pro); учасники з їхньою кількістю в OpenCart; пошук товару й додавання цілого товару або одного значення опції; список утримань непідтверджених замовлень.
- Форма товару: рядок під полем «Кількість» з назвою пулу. Нова цифра в цьому полі чи в кількості значення опції встановлює пул, а стара цифра з давно відкритої форми — ні.
- «Синхронізувати кількості» — після CSV-імпорту чи іншого модуля, що пише кількості напряму: дзеркала знову показують пул, учасники видалених товарів прибираються.
Як це працює — крок за кроком
- Ви створюєте пул (наприклад, «Ваніль»), задаєте залишок і додаєте учасників: батончик цілком і значення «Ваніль» з кожного списку набору. Кількість кожного учасника в OpenCart стає дзеркалом пулу.
- Покупець додає товар у кошик. Модуль рахує, скільки одиниць кожного пулу просить весь кошик, з урахуванням того, що утримують непідтверджені замовлення інших покупців, і відмовляє з поясненням, якщо не вистачає.
- На кроці підтвердження — окремим запитом чи всередині сторінки оформлення OpenCart 4 і One Page — модуль бере замок бази, ще раз перевіряє кошик по пулу і утримує одиниці замовлення. Інший покупець, який підтверджує в ту саму секунду, чекає своєї черги й бачить уже меншу цифру. Черга довша за 10 секунд (налаштовується) — покупець отримує відмову, а не ризик продати двічі.
- Коли замовлення переходить у статус обробки чи виконання, модуль знімає одиниці з пулу — рівно один раз на рядок замовлення — і оновлює кількість усіх учасників. Скасування повертає одиниці.
- Утримання непідтвердженого замовлення живе 60 хвилин (налаштовується), потім одиниці знову доступні іншим покупцям.
Що перевірено, а що ні
Перевірено локально на чотирьох версіях OpenCart: 79 перевірок на OpenCart 4.1.0.3 і 4.0.2.3 і по 77 на 3.0.5.0 і 2.3.0.2 за основним сценарієм, плюс окремі прогони в браузері, з One Page Checkout, правки замовлень, імпорту й листів Pro. Версію 1.0.1 — тим самим набором, плюс п’ять прогонів поспіль одночасних завантажень сторінки оформлення (штатної й One Page) на OpenCart 4.1 і 4.0.2.3 — щоразу рівно 2 замовлення з 8, пул не нижче нуля — і 24 комбінації мови магазину й мови покупця для повідомлення «в кошик». Ліцензійний сервер і пошту підміняли тестові сервери.
Межі, про які варто знати. Захист від одночасних покупців стоїть на кроці підтвердження замовлення — і тоді, коли він іде окремим запитом, і коли OpenCart 4 чи наш One Page відкриває його всередині сторінки оформлення. Сторонній one-page чекаут, що записує замовлення в обхід цього кроку, перевіряє кошик без замка; утримання модуль і тоді пише лише тоді, коли пул його покриває. Замовлення, оплачене вже після того, як його утримання минуло (60 хвилин за замовчуванням), списує пул навіть у мінус — так само, як OpenCart без модуля; це видно в історії пулу. Не перевіряли: платіжні шлюзи зі зворотним викликом банку, сторонні one-page чекаути (крім нашого), спільну роботу з Option Combinations, варіанти товарів OpenCart 4 (master / variant), MySQL 8 і кластери Galera.
Що під капотом
- Пул — у власній таблиці. Кількості учасників в OpenCart лише показують, скільки пул ще може покрити; чекаут рахує по пулу.
- Одне списання на рядок. Рядок замовлення знімає з пулу один раз (умовне оновлення в базі), тож повторна зміна статусу чи повторне скасування нічого не подвоює.
- Утримання на підтвердженні. Замовлення, що дійшло до кроку підтвердження, утримує свої одиниці; повторне відкриття кроку того самого покупця замінює утримання, а не додає друге.
- Без правок ядра і без OCMOD-патчів — лише події OpenCart; одна бібліотека на три збірки, код сумісний з PHP 7.0, працює і з драйвером бази pdo в OpenCart 4.1.
- Ліцензія — окремою групою налаштувань, тож збереження налаштувань її не зачіпає.
- Видалення знімає події й таблиці модуля (можна залишити дані для повторного встановлення).
Як встановити
- OpenCart 4: Розширення → Інсталятор → завантажте
cc_sharedstock.ocmod.zip(ім’я архіву не змінюйте) і натисніть «Встановити». OpenCart 3: Розширення → Інсталятор →cc_sharedstock-oc3.ocmod.zip→ «Встановити». OpenCart 2.3: Розширення → Інсталятор →cc_sharedstock-oc2.ocmod.zip, якщо в налаштуваннях магазину увімкнено FTP; інакше залийте вміст папкиupload/з архіву в корінь магазину. - Розширення → Розширення → Модулі → Shared Stock → «Встановити».
- Каталог → Спільний залишок: створіть пул і додайте учасників — товар цілком або значення опції.
- Задайте залишок пулу або залиште поле порожнім — тоді пул візьме залишок першого доданого учасника.
- Для Pro: вставте ліцензійний ключ з листа після оплати або увімкніть тріал на вкладці «Ліцензія» налаштувань модуля.
Питання
про модуль
Не знайшли відповідь? Напишіть у Telegram — відповімо протягом робочого дня.
Чим це відрізняється від Option Combinations?
Option Combinations веде залишок комбінацій опцій усередині одного товару. Shared Stock потрібен, коли та сама річ продається в кількох товарах або в кількох списках опцій: окремий батончик «Ваніль», «Ваніль» у кожному зі списків «Смак 1…5» подарункового набору, той самий смак в іншому наборі. Тобто це не дубль, а інший сценарій: один залишок для різних товарів і опцій. Спільну роботу обох модулів в одному магазині ми ще не перевіряли.
Це справді захищає від перепродажу, коли двоє платять одночасно?
Так, на кроці підтвердження: замовлення утримує свої одиниці під замком бази, другий покупець чекає й бачить, що пулу вже не вистачає. У тесті 8 покупців одночасно підтверджували по 4 одиниці з пулу на 10 — пройшло рівно 2 замовлення, пул ніколи не пішов у мінус; без модуля той самий тест пропускав усі 4 з 4 перших. З версії 1.0.1 так само захищено випадок, коли OpenCart 4 чи One Page записує замовлення вже під час завантаження сторінки оформлення: 8 одночасних завантажень — рівно 2 замовлення, у 5 прогонах поспіль.
Коли знімаються одиниці з пулу?
Коли замовлення переходить у статус обробки чи виконання — як OpenCart знімає залишок товару. Скасування повертає одиниці, повторне скасування нічого не повертає вдруге. Непідтверджене замовлення лише утримує одиниці на час з налаштувань (60 хвилин за замовчуванням).
Що стане з кількістю товару, коли він увійде в пул?
Кількість учасника в OpenCart стає дзеркалом пулу і рахується модулем. Порожній новий пул бере залишок першого доданого учасника, тож цифра не обнуляється. Нова цифра, введена в поле «Кількість» товару чи значення опції, встановлює пул.
Імпорт з CSV перезаписав кількості — що робити?
Вітрина й далі рахує по пулу, тож зайвого не продасть. Натисніть «Синхронізувати кількості» на сторінці пулів — дзеркала знову покажуть цифру пулу. Якщо імпорт несе нову фактичну цифру залишку, введіть її в пул.
Працює з нашим One Page Checkout?
Так, ми перевірили їх разом на OpenCart 4.1, 4.0.2.3, 3.0 і 2.3: замовлення через One Page, відмова, коли пул став меншим за кошик, і одночасні підтвердження, зокрема коли One Page записує замовлення під час завантаження сторінки.
Інтерфейс українською?
Так: адмінка модуля — українською, англійською і російською, а повідомлення покупцю — мовою, яку він обрав на вітрині (з версії 1.0.1 і на OpenCart 3 та 2.3).
Ліцензія на рік?
Ні. Для OpenCart це одна оплата, ліцензія назавжди, і вона одна на всі три збірки: 4.x, 3.x і 2.3. Пули, перевірка кошика й захист на підтвердженні — у безкоштовній версії без обмеження в часі.
Поки що жодного відгуку. Будьте першим.
Поки питань немає. Запитай — ми відповімо протягом 24 годин.
Не той варіант, що шукаєте?
Робимо кастомні модулі під WordPress, WooCommerce, OpenCart і Shopify. Розкажіть про задачу — підготуємо оцінку.
Замовити кастомний модуль
Купівля модуля
—



