You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Обновлена документация компонента ms3FirstTimeBuyerDiscount: уточнены условия применения скидки, добавлены новые параметры и улучшены описания методов. Включены изменения для поддержки исключения текущего заказа из подсчёта оплаченных, а также обновлены настройки и интеграция с MiniShop3.
Copy file name to clipboardExpand all lines: docs/components/ms3firsttimebuyerdiscount/extension.md
+9-5Lines changed: 9 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -18,16 +18,16 @@ $modx->services->add('ms3ftb_discount', function () use ($modx) {
18
18
});
19
19
```
20
20
21
-
Ваша реализация должна предоставлять метод `apply(array $scriptProperties): ?float` (и при необходимости остальные публичные методы, если вы вызываете их из своего кода).
21
+
Реализация должна предоставлять минимум метод `apply(array $scriptProperties): ?float`; остальные публичные методы — по необходимости при вызове из своего кода.
22
22
23
23
## Наследование FtbDiscountService
24
24
25
25
Сервис спроектирован так, чтобы ключевую логику можно было переопределить в наследнике:
26
26
27
27
-**isEligible(int $userId, ?object $draft): bool** — изменить условия права на скидку (например, по группе пользователя или по полю черновика).
28
-
-**getPaidOrdersCount(int $userId): int** — изменить способ подсчёта оплаченных заказов.
29
-
-**getGuestContactFromDraft(?object $draft): array** — изменить извлечение email/phone гостя из черновика.
30
-
-**getPaidOrdersCountByContact(string $email, string $phone): int** — изменить подсчёт оплаченных заказов для гостей по контактам.
28
+
-**getPaidOrdersCount(int $userId, int $excludeOrderId = 0): int** — изменить способ подсчёта оплаченных заказов (с исключением текущего заказа).
29
+
-**getGuestContactFromDraft(?object $draft): array** — изменить извлечение/нормализацию email/phone гостя из черновика.
30
+
-**getPaidOrdersCountByContact(string $email, string $phone, int $excludeOrderId = 0): int** — изменить подсчёт оплаченных заказов для гостей.
31
31
-**calculateDiscount(float $cost, string $type, float $value): float** — изменить формулу (например, минимум суммы заказа).
32
32
33
33
Пример: скидка только для группы «Партнёр»:
@@ -44,7 +44,7 @@ class PartnerFtbService extends FtbDiscountService
// или отправить в CRM/аналитику по $params['user_id'], $params['discount_amount']
97
97
```
98
98
99
+
## Константы и настройки
100
+
101
+
В сервисе используются внутренние константы типов скидки: `percent`, `fixed`. Ключи настроек: `ftb_enabled`, `ftb_discount_type`, `ftb_discount_value`, `ftb_allow_combination`. Полный список и типы см. в [API](api#системные-настройки).
102
+
99
103
## Логирование
100
104
101
105
Плагин пишет в лог MODX при успешном применении скидки:
Copy file name to clipboardExpand all lines: docs/components/ms3firsttimebuyerdiscount/index.md
+6-7Lines changed: 6 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -14,17 +14,16 @@ items: [
14
14
---
15
15
# ms3FirstTimeBuyerDiscount
16
16
17
-
Компонент для [MiniShop3](/components/minishop3/): автоматическая скидка на первый заказ. При нуле оплаченных заказов к стоимости корзины применяется скидка (процент или фиксированная сумма). Для авторизованных учитывается `user_id`, для гостей — `email`/`phone` из `Address` черновика заказа. Оплаченные заказы определяются по настройке MiniShop3 `ms3_status_for_stat`.
18
-
19
-
**Именование:** для пользователя — **ms3FirstTimeBuyerDiscount**; в коде (папки, namespace, плагины) — **ms3firsttimebuyerdiscount**.
17
+
Компонент для [MiniShop3](/components/minishop3/): автоматическая скидка на первый заказ. При нуле оплаченных заказов к стоимости корзины применяется скидка (процент или фиксированная сумма). Для авторизованных учитывается `user_id`, для гостей — `email`/`phone` из `Address` черновика заказа. Статусы оплаченных заказов берутся из `ms3_status_for_stat` с учётом `ms3_status_new`.
20
18
21
19
## Возможности
22
20
23
21
-**Скидка на первый заказ** — применяется при расчёте корзины (событие `msOnGetCartCost`), без правки шаблонов
24
22
-**Тип скидки** — процент от суммы или фиксированная сумма в валюте магазина
25
23
-**Определение «первого» покупателя** — для пользователя по `user_id`, для гостя по `email`/`phone`, с учётом статусов из `ms3_status_for_stat`
24
+
-**Контроль комбинации скидок** — настройка `ftb_allow_combination` позволяет запретить применение FTB, если в корзине уже есть скидка
26
25
-**События** — `ftbOnBeforeApply` (отмена или подмена суммы), `ftbOnApply` (логирование, аналитика)
27
-
-**Интеграция с фронтендом** — в ответ `getCost()` добавляется `ftb_discount` (`amount`, `message`) для показа уведомления
26
+
-**Плашка на странице заказа** — сниппет `ms3ftbDiscountBanner` + frontend-логика проверки eligibility по email/phone
28
27
-**Расширяемость** — подмена сервиса в контейнере `ms3ftb_discount`, наследование `FtbDiscountService`
29
28
30
29
## Системные требования
@@ -51,14 +50,14 @@ items: [
51
50
52
51
### После установки
53
52
54
-
Включите плагин **ms3FirstTimeBuyerDiscount** и привяжите его к событию **msOnGetCartCost**. Задайте настройки скидки в **Настройки → ms3firsttimebuyerdiscount**.
53
+
Задайте настройки скидки в **Настройки → ms3firsttimebuyerdiscount**.
55
54
56
55
Подробнее: [Быстрый старт](quick-start).
57
56
58
57
## Термины
59
58
60
59
| Термин | Описание |
61
60
|--------|----------|
62
-
|**First-Time Buyer**| Авторизованный пользователь или гость с нулём заказов в статусах из настройки MiniShop3 `ms3_status_for_stat`|
61
+
|**First-Time Buyer**| Авторизованный пользователь или гость с нулём заказов в статусах из `ms3_status_for_stat` (с учётом `ms3_status_new`)|
63
62
|**Оплаченный заказ**| Заказ в одном из статусов, перечисленных в `ms3_status_for_stat` (например, «Оплачен», «Доставлен») |
64
-
|**Скидка**| Сумма или процент, вычитаемые из стоимости корзины при расчёте в `msOnGetCartCost`; дополнительно в API-ответ добавляется `ftb_discount`|
63
+
|**Скидка**| Сумма или процент, вычитаемые из стоимости корзины при расчёте в `msOnGetCartCost`|
0 commit comments