Задача сделать на сайте скидку, которая применяется к корзине. Скидка должна быть равна количеству согласных в логине пользователя. Например для человека с логином login скидка будет 3%
Я предположила, что надо сделать обработчик по событию OnBeforeBasketAdd
в этом обработчике у текущего пользователя если он авторизован получать логин далее получить число согласных букв и далее формировать скидку в корзине.
Но вот как создавать саму скидку не понятно?
Каждый раз вызывать обработчик и смотреть список скидок если среди них есть скидка равная числу согласных букв в логине пользователя то получать ID скидки и применять к корзине таким образом:
$basket = Bitrix\Sale\Basket::loadItemsForFUser(Bitrix\Sale\Fuser::getId(), SITE_ID);
$discountApply = $basket->applyDiscount($discountId);
В том случае если скидки нет то создавать скидку так:
$discount = array(
'LID' => SITE_ID,
'NAME' => 'Скидка 10%',
'ACTIVE' => 'Y',
'DISCOUNT_TYPE' => 'P', // Процентная скидка
'VALUE' => 10, // 10%
);
$discountId = CSaleDiscount::Add($discount);
И дальше применять созданную скидку по ID к корзине текущего пользователя.
Может быть есть возможность как-то более гибко создавать скидку, например сделать некую динамическую скидку которая будет менять % скидки в зависимости от переданного значения которое будет ей передаваться в обработчике перед добавлением товара в корзине?