Чтобы добавить скидку в корзине на основе количества согласных букв в логине пользователя в 1С-Битрикс, вы можете использовать событие "OnSaleOrderBeforeSaved".
1. Создайте новый модуль в вашей установке 1С-Битрикс. Для этого создайте папку local/modules
, в ней создайте папку модуля, например my.module
, и файл my.module.php
. В файле my.module.php
определите информацию о вашем модуле:
<?php use BitrixMainLocalizationLoc; Loc::loadMessages(__FILE__); class my_module extends CModule { public function DoInstall() { // ваш код установки модуля } public function DoUninstall() { // ваш код удаления модуля } }
2. В этом же файле определите функцию обработчика события OnSaleOrderBeforeSaved
, которая будет применять скидку к заказу исходя из количества согласных букв в логине пользователя:
<?php use BitrixMainEventManager; use BitrixSaleBasket; use BitrixSaleBasketItem; use BitrixSaleOrder; class my_module extends CModule { public function DoInstall() { // регистрация обработчика события OnSaleOrderBeforeSaved $eventManager = EventManager::getInstance(); $eventManager->registerEventHandler( 'sale', 'OnSaleOrderBeforeSaved', 'my.module', 'MyModuleMyModuleClass', 'onSaleOrderBeforeSaved' ); } public function DoUninstall() { // удаление обработчика события OnSaleOrderBeforeSaved $eventManager = EventManager::getInstance(); $eventManager->unRegisterEventHandler( 'sale', 'OnSaleOrderBeforeSaved', 'my.module', 'MyModuleMyModuleClass', 'onSaleOrderBeforeSaved' ); } } class MyModuleClass { public static function onSaleOrderBeforeSaved(Event $event) { $order = $event->getParameter('ENTITY'); $basket = $order->getBasket(); foreach ($basket as $basketItem) { /** @var BasketItem $basketItem */ $quantity = $basketItem->getQuantity(); $login = $basketItem->getField('LOGIN_PROPERTY_VALUE'); $consonantsCount = self::countConsonants($login); if ($consonantsCount > 0) { $discount = $consonantsCount * 10; // пример: скидка 10 рублей за каждую согласную букву $basketItem->setField('PRICE', $basketItem->getPrice() - $discount); $basketItem->setField('CUSTOM_PRICE', 'Y'); } } return $event; } private static function countConsonants($string) { $consonants = array('B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'X', 'Z'); $string = strtoupper($string); return count(array_intersect(str_split($string), $consonants)); } }
3. После создания модуля, вам необходимо его установить. Зайдите в административный раздел и перейдите в раздел "Marketplace" -> "Установленные решения", найдите свой модуль и установите его.
4. После установки модуля, необходимо будет настроить событие. В административной панели 1С-Битрикс перейдите в раздел "Магазин" -> "Настройки магазина" -> "Обработка заказов". Найдите событие "OnSaleOrderBeforeSaved" и добавьте ваш модуль в список обработчиков этого события.
Теперь, при оформлении заказа в корзине, скидка будет применяться к каждому товару в зависимости от количества согласных букв в логине пользователя.