[msPromoCode] Кейс. Именные промокоды для пользователя


На днях меня спросили, как в msPromoCode можно применить купон только для группы Users. Набросав на коленке плагин и поделившись им с пользователем, я начал размышлять, как бы это упаковать в кейсик. Размышления навели меня на именные купоны. Думаю, пригодится многим.

Вариант 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», чтобы скрипт мог понять, что купон именной.

P.S. Кстати, при помощи msPromoCode можно указать и условия применения промокода, такие как «Общая сумма заказа от» или «Кол-во товара в корзине от».
Павел Гвоздь
01 июля 2018, 07:58
3
321
+6

Комментарии: 0