[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 можно указать и условия применения промокода, такие как «Общая сумма заказа от» или «Кол-во товара в корзине от».
Поблагодарить автора
Отправить деньги