9. Умови (Conditions)

Умови (Conditions) - це серце FCR. За допомогою умов ви говорите модулю "показуй цей метод тільки якщо..." або "застосовуй цей підсумок тільки коли...". У FCR є понад 50 типів умов, об’єднаних у 8 логічних груп.

Що ви дізнаєтесь у цьому розділі
  • Як працюють умови та коли вони перевіряються
  • Інтерфейс додавання та редагування умов
  • Повний список усіх типів умов з прикладами використання
  • Як працює strict mode для умов на товари
  • Як комбінувати умови для складних сценаріїв

Як працюють умови

Коли користувач відкриває сторінку чекауту, OpenCart запитує у FCR: "Які методи доставки/оплати показати цьому покупцеві?". FCR проходить по списку усіх методів і для кожного перевіряє його умови:

  1. Якщо немає умов - метод показується завжди
  2. Якщо умови є - FCR обчислює результат кожної (true/false)
  3. Результати об’єднуються через логічний вираз (AND за замовчуванням, або власний)
  4. Якщо результат true - метод показується
  5. Якщо результат false - метод приховується (або показується заглушка)

Те ж саме стосується підсумків замовлення і націнок за оплату - вони мають власні умови які перевіряються при кожному обчисленні підсумків.

Додавання умови

  1. Відкрийте редактор методу (доставки, оплати або підсумку)
  2. Знайдіть блок "Умови (Conditions)"
  3. Натисніть зелену кнопку "Додати умову"
  4. У модальному вікні виберіть тип умови зі списку (згрупований за категоріями)
  5. Заповніть параметри умови (значення, оператор, список об’єктів тощо)
  6. Натисніть Зберегти у модалці
  7. Умова з’явиться у списку з нумерацією $0, $1, $2 ...
Модальне вікно вибору типу умови
Модальне вікно з умовами згрупованими за категоріями

Умова має бути заповнена

Модуль не дозволить додати умову, у якій не заповнені обовʼязкові параметри. Наприклад, обрано тип "Категорія", але не вибрано жодної категорії, або тип "Загальна сума", але не введено число для порівняння. У модальному вікні зʼявиться повідомлення, і умова не додасться.

Умова без заповнених значень
Модуль не дозволяє додати умову, у якій не вибрано жодного значення
Чому це важливо

Умова без значень не просто марна: вона вважається виконаною завжди. Правило виглядає налаштованим, у списку умов щось є, а метод показується всім підряд. Саме тому такі умови блокуються одразу.

Перевірка спрацьовує і під час збереження методу, тому вона знайде також умови, збережені раніше. Якщо у вже налаштованого методу знайдеться порожня умова, модуль підсвітить її у списку і не дасть зберегти, доки ви її не заповните або не видалите.

Кілька винятків, де порожнє значення допустиме і не блокується:

  • Замовлень клієнта і Всього замовлень - список статусів тут лише звужує підрахунок, без нього рахуються всі замовлення;
  • Атрибут товару - порожній текст означає "атрибут присутній з будь-яким значенням";
  • умови без параметрів узагалі (наприклад Використано подарунковий сертифікат).

Групи умов

Усі умови розділені на 8 логічних груп. Це допомагає швидко знайти потрібну умову в списку:

ГрупаПризначенняКількість
ТовариПеревірки на конкретні товари, категорії, виробники, опції, атрибути в кошику~25
КошикПідсумок, кількість, вага, габарити, наявність~12
АдресаКраїна, регіон, гео-зона, місто, поштовий індекс5
ПокупецьКонкретний покупець, група, статус логіну, історія замовлень6
СесіяМагазин, мова, валюта, купон, ваучер, бонуси6
ЧекаутОбраний метод доставки/оплати, вартість доставки3
Дата/ЧасДень тижня, година, конкретна дата3
ІншеКастомні підсумки як умова, виклик API2

Група: Товари

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

Категорія товару

Тип: category | Параметри: мульти-вибір категорій + strict

Перевіряє чи є у кошику товар з обраної категорії.

Приклад: безкоштовна доставка для електроніки

Власний метод "Безкоштовна доставка" має показуватися тільки якщо у кошику є товар з категорії "Електроніка".

  • Тип: category
  • Категорії: "Електроніка"
  • Strict: вимкнено (достатньо хоча б одного товару)

Кількість товарів у категорії

Тип: category_quantity | Параметри: категорія + оператор + число

Сумує кількість одиниць товарів з обраної категорії і порівнює з порогом.

Приклад: знижка на оптову закупівлю

Підсумок "Опт-знижка -5%" застосовується якщо у кошику >= 10 одиниць з категорії "Аксесуари".

Сума товарів категорії

Тип: category_total | Параметри: категорія + оператор + число

Сумує вартість усіх товарів з обраної категорії.

Вага товарів категорії

Тип: category_weight | Параметри: категорія + оператор + число

Сумує вагу товарів з категорії. Корисно для важких категорій (меблі) які потребують спеціальної доставки.

Конкретний товар

Тип: product | Параметри: мульти-вибір товарів + strict

Перевіряє чи є у кошику конкретний товар.

Інші умови по товарах

  • product_quantity - кількість конкретного товару
  • product_total - сума вартості конкретного товару
  • product_weight - вага конкретного товару
  • product_instock - чи всі екземпляри товару є в наявності на складі
  • manufacturer - виробник (бренд)
  • manufacturer_quantity, manufacturer_total, manufacturer_weight - агрегати по бренду
  • option - наявність опції товару (наприклад "Розмір: XL")
  • attribute - значення атрибуту товару
  • model, sku, upc, ean, jan, isbn, mpn - перевірка по технічних кодах товару
  • location - локація товару (поле "Location" в OC)
  • stock_status - статус наявності
  • product_tag - теги товару

Strict mode для товарних умов

Багато умов у групі "Товари" мають перемикач "Strict match". Це принципово змінює логіку перевірки:

РежимЛогікаКоли true
Strict вимкнено (за замовчуванням)"Хоча б один товар з кошика відповідає умові"Якщо у кошику 5 товарів і хоча б 1 з обраної категорії - true
Strict увімкнено"Усі товари з кошика мають відповідати умові"Якщо у кошику 5 товарів, усі мають бути з обраної категорії - інакше false
Сценарій де strict критичний

Завдання: зробити "Доставку для крихких товарів" доступною тільки для замовлень де усі товари з категорії "Скляний посуд".

Рішення: умова category = "Скляний посуд" зі strict = увімкнено. Без strict цей метод показувався б навіть якщо в кошику 1 крихкий + 10 звичайних товарів, що небезпечно.

Група: Кошик

Підсумок (Subtotal)

Тип: total | Параметри: оператор + число

Порівнює суму товарів у кошику (без доставки і податків) з пороговим значенням.

Приклад: мінімальна сума для COD

Метод "Накладений платіж" доступний тільки для замовлень >= 200 грн.

  • Тип: total
  • Оператор: >=
  • Значення: 200

Підсумок з тоталями (Total full)

Тип: total_full | Параметри: оператор + число

Те саме що total, але з врахуванням усіх інших підсумків (податки, FCR-тоталі) окрім shipping.

Загальна кількість товарів

Тип: quantity | Параметри: оператор + число

Кількість усіх одиниць товарів у кошику (не унікальних SKU).

Загальна вага

Тип: weight | Параметри: оператор + число (у одиницях магазину)

Сумарна вага кошика. Часто використовується для приховування доставок з обмеженням ваги.

Приклад: приховати "Кур’єр" для важких замовлень

Кур’єрська доставка не приймає замовлення > 30 кг. Умова weight <= 30.

Габарити

Окрема група умов для перевірки розмірів товарів. Усі обчислюються у базових одиницях довжини магазину (см / мм / м):

  • length, width, height - максимальна довжина/ширина/висота серед усіх товарів кошика (для перевірки чи "пройде" найбільший товар)
  • total_length, total_width, total_height - сума всіх габаритів (для оцінки об’єму)
  • max_weight - максимальна вага одного товару (на відміну від weight який сумує)
Конвертація одиниць

FCR автоматично конвертує габарити з одиниць товару (mm/cm/m) до базової одиниці магазину. Перевірка спрацює правильно навіть якщо товар має габарити в міліметрах, а магазин - у сантиметрах.

Інші умови кошика

  • product_price_min - мінімальна ціна одного товару у кошику
  • product_price_max - максимальна ціна одного товару
  • instock - чи всі товари в наявності
  • shipping_not_required - кошик не вимагає доставки (тільки віртуальні товари)
  • has_any_option - чи є хоча б один товар з опціями
  • has_special_price - чи є товар зі знижкою (special) у кошику

Група: Адреса

Умови з цієї групи перевіряють адресу доставки покупця. Якщо адреса ще не введена - умови повертають false.

Країна

Тип: country | Параметри: мульти-вибір країн

Перевіряє чи країна доставки знаходиться у списку обраних. Корисно для регіональних обмежень.

Регіон / Область

Тип: zone | Параметри: мульти-вибір регіонів

Перевіряє регіон/область з адреси.

Гео-зона

Тип: geo_zone | Параметри: мульти-вибір гео-зон

Використовує стандартні гео-зони OpenCart (System → Localisation → Geo Zones). Найгнучкіший варіант: одна гео-зона може містити кілька країн і регіонів.

Місто

Тип: city | Параметри: текстове поле з підтримкою масок

Перевіряє назву міста з адреси доставки. Підтримуються маски з *.

Приклад: безкоштовна доставка по Києву

Метод "Безкоштовний кур’єр" з’являється для замовлень у Києві. Можна вказати кілька варіантів через Enter: Київ, Kyiv, Kiev.

Поштовий індекс

Тип: postcode | Параметри: текстове поле з підтримкою масок

Перевіряє індекс з адреси. Маски корисні для діапазонів - наприклад 01* покриє усі індекси Києва що починаються з 01.

Група: Покупець

Конкретний покупець

Тип: customer | Параметри: мульти-вибір з пошуком

Перевіряє чи поточний покупець у списку обраних. Корисно для VIP-покупців з персональними умовами.

Група покупця

Тип: customer_group | Параметри: чекбокси груп

Найчастіше використовувана умова для розділення роздрібних і гуртових покупців.

Приклад: безготівковий розрахунок для юр. осіб

Метод "Безготівковий розрахунок" доступний тільки покупцям у групі "Юридичні особи".

Логін

Тип: logged | Параметри: Так / Ні

Перевіряє чи покупець залогінений. Дозволяє приховати методи які працюють тільки для зареєстрованих покупців.

Замовлення покупця

Тип: orders | Параметри: статуси замовлень + оператор + число

Рахує кількість замовлень покупця зі статусами зі списку і порівнює з порогом. Корисно щоб виділити постійних покупців.

Приклад: знижка для постійних покупців

Підсумок "Знижка постійного покупця -3%" застосовується якщо покупець має >= 5 замовлень зі статусом "Виконано".

Сума витрат покупця

Тип: customer_total_spent | Параметри: оператор + число

Сума усіх попередніх замовлень покупця (виключаючи скасовані). Використовується для VIP-програм.

Днів з реєстрації

Тип: customer_since | Параметри: оператор + число днів

Кількість днів з моменту реєстрації покупця. Можна давати знижки новачкам або, навпаки, бонуси давнім покупцям.

Загальна кількість замовлень магазину

Тип: total_orders | Параметри: статуси + оператор + число

Не плутати з orders! Це загальна кількість замовлень магазину з обраними статусами. Можна використовувати для маркетингових акцій типу "Спецпропозиція тільки для перших 100 замовлень".

Група: Сесія

Магазин (мульти-store)

Тип: store | Параметри: чекбокси магазинів

Перевіряє з якого магазину покупець робить замовлення (актуально для multi-store).

Мова

Тип: language | Параметри: чекбокси мов

Поточна мова інтерфейсу. Корисно для регіональних правил.

Валюта

Тип: currency | Параметри: текстове поле з кодами валют

Поточна валюта (UAH, USD, EUR). Дозволяє приховати методи які працюють тільки в певній валюті.

Купон

Тип: coupon | Параметри: текстове поле з підтримкою масок

Перевіряє чи активований купон і чи його код у списку. Якщо параметри порожні - просто перевіряє факт активації будь-якого купону.

Приклад: знижка з певним купоном

Спеціальний підсумок "Бонус від партнера" застосовується якщо покупець ввів купон PARTNER2026.

Ваучери і бонуси

  • voucher_used - чи активований подарунковий ваучер для оплати
  • reward_used - чи використовуються бонусні бали
  • voucher - чи є подарунковий ваучер у кошику (для покупки)

Група: Чекаут

Метод доставки

Тип: shipping_method | Параметри: чекбокси встановлених методів + поле для маски

Перевіряє поточно обраний метод доставки. Це дуже важлива умова - вона дозволяє створювати правила типу "Якщо обрано Нову Пошту - застосуй ось цю націнку".

Порядок перевірки

Цю умову доцільно використовувати тільки для умов оплати, націнок і підсумків. Використання її для умов самої доставки створює парадокс: метод не може перевіряти сам себе перед тим як його обрали.

Вартість доставки

Тип: shipping_cost | Параметри: оператор + число

Перевіряє вартість поточно обраної доставки. Корисно для націнок типу "Якщо доставка дорожча за 100 - надай знижку".

Метод оплати

Тип: payment_method | Параметри: чекбокси методів + поле для маски

Перевіряє поточно обраний метод оплати. Можна використовувати для підсумків які залежать від оплати без механізму surcharge.

Група: Дата/Час

День тижня

Тип: day | Параметри: чекбокси днів тижня

Поточний день тижня на сервері. Корисно щоб приховати кур’єрську доставку у вихідні.

Приклад: курс тільки в робочі дні

Метод "Кур’єрська доставка сьогодні" доступний тільки з понеділка по п’ятницю. Дні: Пн, Вт, Ср, Чт, Пт.

Час дня

Тип: time | Параметри: чекбокси годин (0-23) або оператор + число

Поточна година. Має два режими:

  • Якщо обрані конкретні години - перевірка "поточна година у списку обраних"
  • Якщо нічого не обрано - перевірка "поточна година оператор число" (наприклад < 18)
Приклад: експрес-доставка до 16:00

Метод "Експрес-доставка сьогодні" доступний тільки якщо замовлення оформлено до 16:00. Тип: time, оператор: <, значення: 16 (години не обираємо щоб увімкнувся режим оператора).

Конкретна дата

Тип: date | Параметри: оператор + дата

Порівнює поточну дату з вказаною. Оператори: = (точно ця дата), < (до), > (після), <=, >=.

Приклад: акція до кінця місяця

Підсумок "Акційна знижка -10%" діє до 31 грудня 2026 включно. Тип: date, оператор: <=, значення: 2026-12-31. Після цієї дати знижка автоматично зникне.

Група: Інше

Кастомний підсумок

Тип: customized_total | Параметри: чекбокси системних і FCR-підсумків + оператор + число

Дозволяє створювати залежності між підсумками. Перевіряє суму обраних підсумків і порівнює з порогом.

Наприклад: "якщо сума знижок (sub_total + voucher) > 500 - застосуй додатковий підсумок ‘Великий бонус’".

Уникайте циклічних залежностей

FCR має захист від рекурсії при перевірці FCR-тоталів через цю умову (внутрішній прапор _checking_fcr_totals), але краще не створювати залежність "Тотал A залежить від Тотала Б, який залежить від Тотала А".

API метод

Тип: api | Параметри: назва PHP-методу

Викликає вашу власну PHP-функцію для перевірки. Це "запасний варіант" для випадків коли стандартних умов недостатньо. Детально - у розділі 14.

Редагування та видалення умов

Після додавання умови з’являються у списку з нумерацією $0, $1, $2... Біля кожної умови є дві кнопки:

  • Редагувати - відкриває модалку зі збереженими параметрами умови
  • Видалити - видаляє умову зі списку. Інші умови автоматично переіндексовуються
Список умов з нумерацією
Список умов з індексами $0, $1, $2 та кнопками управління
Переіндексація і логічний вираз

Якщо ви видаляєте умову яка згадана у логічному виразі (наприклад, видаляєте $1 а вираз був $0 AND $1), решта умов переіндексується ($1 стане $0). Логічний вираз не оновлюється автоматично - перевірте його після видалення!

Складні приклади з кількома умовами

Часто одна умова - не достатньо. У FCR ви можете додати скільки завгодно умов до одного методу. За замовчуванням усі умови об’єднуються через AND (мають виконуватися одночасно). Для складніших комбінацій використовується логічний вираз (наступний розділ).

Приклад 1: VIP-доставка

Завдання: метод "VIP-доставка зі страховкою" доступний тільки якщо:

  • Сума замовлення >= 5000
  • Покупець залогінений
  • Покупець у групі "VIP"

Налаштування:

  • Умова $0: total >= 5000
  • Умова $1: logged = yes
  • Умова $2: customer_group in [VIP]
  • Логічний вираз: порожній (за замовчуванням AND для всіх)
Приклад 2: знижка на День Народження магазину

Завдання: підсумок "Знижка на День Народження -15%" діє тільки 1 червня 2026 для замовлень >= 300.

  • $0: date >= 2026-06-01
  • $1: date <= 2026-06-01
  • $2: total >= 300

Усі AND - підсумок працюватиме тільки 1 червня для замовлень від 300 грн.

Приклад 3: націнка за післяплату для важких замовлень

Завдання: націнка +50 до COD якщо у кошику меблі (категорія "Меблі") і вага > 20 кг.

  • Метод оплати: COD
  • У блоці Surcharge - умова $0: category = [Меблі]
  • Умова $1: weight > 20
  • Логічний вираз: порожній (AND)

Якщо покупець обирає COD з 25 кг меблів - +50 грн. Якщо інший товар або менша вага - націнки немає.