9. Умови (Conditions)
Умови (Conditions) - це серце FCR. За допомогою умов ви говорите модулю "показуй цей метод тільки якщо..." або "застосовуй цей підсумок тільки коли...". У FCR є понад 50 типів умов, об’єднаних у 8 логічних груп.
- Як працюють умови та коли вони перевіряються
- Інтерфейс додавання та редагування умов
- Повний список усіх типів умов з прикладами використання
- Як працює strict mode для умов на товари
- Як комбінувати умови для складних сценаріїв
Як працюють умови
Коли користувач відкриває сторінку чекауту, OpenCart запитує у FCR: "Які методи доставки/оплати показати цьому покупцеві?". FCR проходить по списку усіх методів і для кожного перевіряє його умови:
- Якщо немає умов - метод показується завжди
- Якщо умови є - FCR обчислює результат кожної (true/false)
- Результати об’єднуються через логічний вираз (AND за замовчуванням, або власний)
- Якщо результат
true- метод показується - Якщо результат
false- метод приховується (або показується заглушка)
Те ж саме стосується підсумків замовлення і націнок за оплату - вони мають власні умови які перевіряються при кожному обчисленні підсумків.
Додавання умови
- Відкрийте редактор методу (доставки, оплати або підсумку)
- Знайдіть блок "Умови (Conditions)"
- Натисніть зелену кнопку "Додати умову"
- У модальному вікні виберіть тип умови зі списку (згрупований за категоріями)
- Заповніть параметри умови (значення, оператор, список об’єктів тощо)
- Натисніть Зберегти у модалці
- Умова з’явиться у списку з нумерацією
$0,$1,$2...
Умова має бути заповнена
Модуль не дозволить додати умову, у якій не заповнені обовʼязкові параметри. Наприклад, обрано тип "Категорія", але не вибрано жодної категорії, або тип "Загальна сума", але не введено число для порівняння. У модальному вікні зʼявиться повідомлення, і умова не додасться.
Умова без значень не просто марна: вона вважається виконаною завжди. Правило виглядає налаштованим, у списку умов щось є, а метод показується всім підряд. Саме тому такі умови блокуються одразу.
Перевірка спрацьовує і під час збереження методу, тому вона знайде також умови, збережені раніше. Якщо у вже налаштованого методу знайдеться порожня умова, модуль підсвітить її у списку і не дасть зберегти, доки ви її не заповните або не видалите.
Кілька винятків, де порожнє значення допустиме і не блокується:
- Замовлень клієнта і Всього замовлень - список статусів тут лише звужує підрахунок, без нього рахуються всі замовлення;
- Атрибут товару - порожній текст означає "атрибут присутній з будь-яким значенням";
- умови без параметрів узагалі (наприклад Використано подарунковий сертифікат).
Групи умов
Усі умови розділені на 8 логічних груп. Це допомагає швидко знайти потрібну умову в списку:
| Група | Призначення | Кількість |
|---|---|---|
| Товари | Перевірки на конкретні товари, категорії, виробники, опції, атрибути в кошику | ~25 |
| Кошик | Підсумок, кількість, вага, габарити, наявність | ~12 |
| Адреса | Країна, регіон, гео-зона, місто, поштовий індекс | 5 |
| Покупець | Конкретний покупець, група, статус логіну, історія замовлень | 6 |
| Сесія | Магазин, мова, валюта, купон, ваучер, бонуси | 6 |
| Чекаут | Обраний метод доставки/оплати, вартість доставки | 3 |
| Дата/Час | День тижня, година, конкретна дата | 3 |
| Інше | Кастомні підсумки як умова, виклик API | 2 |
Група: Товари
Найбільша група умов. Дозволяє створювати правила залежно від того що знаходиться у кошику.
Категорія товару
Тип: 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 |
Завдання: зробити "Доставку для крихких товарів" доступною тільки для замовлень де усі товари з категорії "Скляний посуд".
Рішення: умова category = "Скляний посуд" зі strict = увімкнено. Без strict цей метод показувався б навіть якщо в кошику 1 крихкий + 10 звичайних товарів, що небезпечно.
Група: Кошик
Підсумок (Subtotal)
Тип: total | Параметри: оператор + число
Порівнює суму товарів у кошику (без доставки і податків) з пороговим значенням.
Метод "Накладений платіж" доступний тільки для замовлень >= 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. Тип: 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... Біля кожної умови є дві кнопки:
- Редагувати - відкриває модалку зі збереженими параметрами умови
- Видалити - видаляє умову зі списку. Інші умови автоматично переіндексовуються
Якщо ви видаляєте умову яка згадана у логічному виразі (наприклад, видаляєте $1 а вираз був $0 AND $1), решта умов переіндексується ($1 стане $0). Логічний вираз не оновлюється автоматично - перевірте його після видалення!
Складні приклади з кількома умовами
Часто одна умова - не достатньо. У FCR ви можете додати скільки завгодно умов до одного методу. За замовчуванням усі умови об’єднуються через AND (мають виконуватися одночасно). Для складніших комбінацій використовується логічний вираз (наступний розділ).
Завдання: метод "VIP-доставка зі страховкою" доступний тільки якщо:
- Сума замовлення >= 5000
- Покупець залогінений
- Покупець у групі "VIP"
Налаштування:
- Умова
$0:total >= 5000 - Умова
$1:logged = yes - Умова
$2:customer_group in [VIP] - Логічний вираз: порожній (за замовчуванням AND для всіх)
Завдання: підсумок "Знижка на День Народження -15%" діє тільки 1 червня 2026 для замовлень >= 300.
$0:date >= 2026-06-01$1:date <= 2026-06-01$2:total >= 300
Усі AND - підсумок працюватиме тільки 1 червня для замовлень від 300 грн.
Завдання: націнка +50 до COD якщо у кошику меблі (категорія "Меблі") і вага > 20 кг.
- Метод оплати: COD
- У блоці Surcharge - умова
$0:category = [Меблі] - Умова
$1:weight > 20 - Логічний вираз: порожній (AND)
Якщо покупець обирає COD з 25 кг меблів - +50 грн. Якщо інший товар або менша вага - націнки немає.