Именные промокоды для пользователя

02 мая 2019, 07:00

Именные промокоды для пользователя

Кейс позволяет привязать промо-код к конкретному юзеру, запрещая применение в любом другом случае.

Вариант 1

Всё очень просто! Создаёте плагин на событие mspcOnBeforeSetCoupon с кодом:

switch ($modx->event->name) {
    case 'mspcOnBeforeSetCoupon':
        // Купон является именным, если в описании у него "user: [[+username]]", иначе никаких проверок не делаем
        if (!preg_match('/^user\: /i', $coupon['description'])) {
            break;
        }
        $username = preg_replace('/^user\: (.*)$/ui', '$1', $coupon['description']);

        // Если в описании промокода указан username пользователя, то применяем промокод
        if (is_object($modx->user) && $modx->user->get('username') == $username) {
            break;
        }

        // Выдаём ошибку применения купона
        $modx->event->output('Промокод "' . $coupon['code'] . '" не является вашим именным!');
        break;
}

Важно при создании промокода, в описании ему указать user: [[+username]], где вместо [[+username]] логин юзера, которому принадлежит промокод.

Вариант 2

Можно вообще обойтись без проверки имени в описании, а купоны создавать с кодом username пользователя. То бишь, промокод будет равен username того пользователя, чей это купон. Вот код для такого решения:

switch ($modx->event->name) {
    case 'mspcOnBeforeSetCoupon':
        // Именной промокод, это когда в description купона написано "user"
        if ($coupon['description'] != 'user') {
            break;
        }

        // Если код купона равен username пользователя, то применяем
        if (is_object($modx->user) && $modx->user->get('username') == $coupon['code']) {
            break;
        }

        // Выдаём ошибку применения купона
        $modx->event->output('Промокод "' . $coupon['code'] . '" не является вашим именным!');
        break;
}

Важно при создании промокода, в описании ему написать user, чтобы скрипт мог понять, что купон именной.



Предыдущий документ
Вывод информации по промо-коду в письме
Следующий документ
Отменить промо-код при наличии в корзине запрещённых товаров