/
bitrix-dev
/
Starter-kit
Обзор
Документация
Войти
/
bitrix-dev
/
Starter-kit
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
main
local/php_interface/init/events.php
359 строк
13 KB
Alexey Karizhenskiy
Первая сборка (из ранее используемого)
19 янв 2026, 21:00
19 янв 2026, 21:00
d843e36
Код
Авторство
О чём код?
<?php if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die(); use Bitrix\Main\EventManager; if (file_exists(__DIR__ . '/Handlers/CatalogImportHandler.php')) { require_once(__DIR__ . '/Handlers/CatalogImportHandler.php'); // После завершения обмена, разделение товаров на цвета (по предложениям) EventManager::getInstance()->addEventHandler( "catalog", "OnCompleteCatalogImport1C", ["CatalogImportHandler", "OnCompleteCatalogImport1CHandlerDivisionGoods"], false, 100 ); // После завершения обмена, проверка товаров на наличие картинок и доступность EventManager::getInstance()->addEventHandler( "catalog", "OnCompleteCatalogImport1C", ["CatalogImportHandler", "OnCompleteCatalogImport1CHandlerCheckGoods"], false, 200 ); } if (file_exists(__DIR__ . '/Handlers/IBlockElementHandler.php')) { require_once(__DIR__ . '/Handlers/IBlockElementHandler.php'); // Перед обновлением элемента инфоблока EventManager::getInstance()->addEventHandler( "iblock", "OnBeforeIBlockElementUpdate", ["IBlockElementHandler", "OnBeforeIBlockElementUpdateHandler"] ); // После создания элемента инфоблока EventManager::getInstance()->addEventHandler( "iblock", "OnAfterIBlockElementAdd", ["IBlockElementHandler", "OnAfterIBlockElementAddHandler"] ); // После создания/обновления элемента инфоблока EventManager::getInstance()->addEventHandler( "iblock", "OnAfterIBlockElementUpdate", ["IBlockElementHandler", "OnAfterIBlockElementUpdateHandler"] ); // Обновление рейтинга товара при добавлении отзыва EventManager::getInstance()->addEventHandler( "iblock", "OnAfterIBlockElementAdd", ["IBlockElementHandler", "OnIBlockElementChangeReviews"] ); // Обновление рейтинга товара при обновлении отзыва EventManager::getInstance()->addEventHandler( "iblock", "OnAfterIBlockElementUpdate", ["IBlockElementHandler", "OnIBlockElementChangeReviews"] ); } if (file_exists(__DIR__ . '/Handlers/ProductHandler.php')) { require_once(__DIR__ . '/Handlers/ProductHandler.php'); // После добавления товара EventManager::getInstance()->addEventHandler( 'catalog', 'ProductOnAfterAdd', ['ProductHandler', 'onProductAdd'] ); // После обновления товара EventManager::getInstance()->addEventHandler( 'catalog', 'ProductOnAfterUpdate', ['ProductHandler', 'onProductUpdate'] ); // Обновление свойства элемента Наличие на складу EventManager::getInstance()->addEventHandler( "catalog", "OnStoreProductAdd", ['ProductHandler', 'storeProductUpdate'] ); EventManager::getInstance()->addEventHandler( "catalog", "OnStoreProductUpdate", ['ProductHandler', 'storeProductUpdate'] ); EventManager::getInstance()->addEventHandler( "catalog", "OnBeforeStoreProductDelete", ['ProductHandler', 'storeProductDelete'] ); } if (file_exists(__DIR__ . '/Handlers/PropPriceHandler.php')) { require_once(__DIR__ . '/Handlers/PropPriceHandler.php'); // Обновление свойства PRICE при изменении цены товара EventManager::getInstance()->addEventHandler( 'catalog', 'OnPriceAdd', ['PropPriceHandler', 'OnPriceUpdateHandler'] ); EventManager::getInstance()->addEventHandler( 'catalog', 'OnPriceUpdate', ['PropPriceHandler', 'OnPriceUpdateHandler'] ); // Обновление свойства PRICE при изменении скидки EventManager::getInstance()->addEventHandler( 'sale', '\Bitrix\Sale\Internals\Discount::OnAfterAdd', ['PropPriceHandler', 'OnDiscountUpdateHandler'] ); EventManager::getInstance()->addEventHandler( 'sale', '\Bitrix\Sale\Internals\Discount::OnAfterUpdate', ['PropPriceHandler', 'OnDiscountUpdateHandler'] ); EventManager::getInstance()->addEventHandler( 'sale', '\Bitrix\Sale\Internals\Discount::OnAfterDelete', ['PropPriceHandler', 'OnDiscountUpdateHandler'] ); } if (file_exists(__DIR__ . '/Handlers/OrderMakeHandler.php')) { require_once(__DIR__ . '/Handlers/OrderMakeHandler.php'); // Добавить в компонент оформления заказа дополнительные данные EventManager::getInstance()->addEventHandler( 'sale', 'OnSaleComponentOrderJsData', ['OrderMakeHandler', 'OnSaleComponentOrderJsData'] ); // Событие после оформления заказа в один шаг EventManager::getInstance()->addEventHandler( 'sale', 'OnSaleComponentOrderOneStepComplete', ['OrderMakeHandler', 'OnSaleComponentOrderOneStepComplete'], false, 200 ); } /* if (file_exists(__DIR__ . '/Handlers/LocationHandler.php')) { require_once(__DIR__ . '/Handlers/LocationHandler.php'); // Кастомная подмена макросов по месторасположению EventManager::getInstance()->addEventHandler( 'main', 'OnProlog', ['LocationHandler', 'OnProlog'], false, 200 // Вызываем после модуля 'intec.regionality' ); EventManager::getInstance()->addEventHandler( 'main', 'OnEndBufferContent', ['LocationHandler', 'OnEndBufferContent'], false, 10 // Вызываем раньше, чем обработчик модуля 'intec.regionality' ); EventManager::getInstance()->addEventHandler( 'sale', 'OnSaleComponentOrderProperties', ['LocationHandler', 'OnSaleComponentOrderProperties'], false, 200 // Вызываем после модуля 'intec.regionality' ); } */ if (file_exists(__DIR__ . '/Handlers/AdminPageHandler.php')) { require_once(__DIR__ . '/Handlers/AdminPageHandler.php'); EventManager::getInstance()->addEventHandler( 'main', 'OnEpilog', ['AdminPageHandler', 'OnAfterEpilog'] ); } if (file_exists(__DIR__ . '/Handlers/SmartCaptcha.php')) { // Регистрация событий для капчи в самом файле require_once(__DIR__ . '/Handlers/SmartCaptcha.php'); } if (file_exists(__DIR__ . '/Handlers/MainEvent.php')) { require_once(__DIR__ . '/Handlers/MainEvent.php'); EventManager::getInstance()->addEventHandler( 'main', 'OnBeforeEventAdd', ['MainEvent', 'addOrderData'] ); } /* // При успешной подписке отправить письмо EventManager::getInstance()->addEventHandler( 'sender', '\Bitrix\Sender\Contact::onAfterAdd', function($event) { $contactId = $event->getParameter('id'); if ($contactId > 0) { $arContact = \Bitrix\Sender\ContactTable::getById($contactId)->fetch(); if ( is_array($arContact) && Bitrix\Sender\Recipient\Type::EMAIL == $arContact['TYPE_ID'] && !empty($arContact['CODE']) ) { CEvent::Send('SENDER_SUBSCRIBE_SUCCESS', SITE_ID, array( 'EMAIL' => $arContact['CODE'] )); } } } ); */ /* // Обновление PHONE_NUMBER из PERSONAL_PHONE после регистрации пользователя EventManager::getInstance()->addEventHandler( 'main', 'OnAfterUserAdd', function(&$arFields) { if ($arFields['ID'] > 0) { $user = CUser::GetByID($arFields['ID'])->Fetch(); if (empty($user['PHONE_NUMBER']) && !empty($user['PERSONAL_PHONE'])) { // Форматируем номер телефона в формат +7 $phone = preg_replace('/[^0-9]/', '', $user['PERSONAL_PHONE']); // Проверяем длину и формат номера if (!empty($phone)) { if (strlen($phone) == 11) { if (substr($phone, 0, 1) == '8') { $phone = '7' . substr($phone, 1); } elseif (substr($phone, 0, 1) == '7') { // Номер уже начинается с 7, оставляем как есть } else { return; // Неверный формат } } elseif (strlen($phone) == 10) { $phone = '7' . $phone; } else { return; // Неверная длина номера } $phone = '+' . $phone; // Проверяем финальный формат if (preg_match('/^\+7\d{10}$/', $phone)) { $user_update = new CUser; $user_update->Update($arFields['ID'], array( 'PHONE_NUMBER' => $phone )); } } } } }, false, 200 ); */ /* // Запрет удаления оплат в заказе (для 1С) - убрать после решения проблемы в 1С EventManager::getInstance()->addEventHandler( 'sale', 'OnBeforeSalePaymentEntityDeleted', function($event) { // Если запрос идет не из 1С, то разрешаем удаление if (empty($_SESSION['BX_CML2_EXPORT'])) { return; } // Если запрос идет из 1С, то запрещаем удаление $event->addResult( new \Bitrix\Main\EventResult( \Bitrix\Main\EventResult::ERROR, new \Bitrix\Sale\ResultError( 'Запрет на удаление оплаты при обмене с 1С' ) ) ); return false; } ); */ /* // Запрет удаления отгрузок в заказе (для 1С) - убрать после решения проблемы в 1С // Данной событие еще не предусмотрено в БУС, поэтому модифицирован файл /bitrix/modules/sale/lib/shipment.php - смотреть коммит в гите EventManager::getInstance()->addEventHandler( 'sale', 'OnBeforeSaleShipmentEntityDeleted', function ($event) { // Если запрос идет не из 1С, то разрешаем удаление if (empty($_SESSION['BX_CML2_EXPORT'])) { return; } // Если запрос идет из 1С, то запрещаем удаление $event->addResult( new \Bitrix\Main\EventResult( \Bitrix\Main\EventResult::ERROR, new \Bitrix\Sale\ResultError( 'Запрет на удаление отгрузки при обмене с 1С' ) ) ); return false; } ); */ // Изменение данных для мета-тегов EventManager::getInstance()->addEventHandler( 'main', 'OnEpilog', function() { global $APPLICATION; $newTitle = $title = $APPLICATION->GetPageProperty('title'); $newDescription = $description = $APPLICATION->GetPageProperty('description'); // Заметить в мета-тегах символ рубля (₽) на слово (руб.) $newTitle = str_replace(['₽', '₽'], 'руб.', $newTitle); $newDescription = str_replace(['₽', '₽'], 'руб.', $newDescription); // Заметить в мета-тегах $newTitle = str_replace(', —', '—', $newTitle); $newDescription = str_replace(', —', '—', $newDescription); // Обновить, если были изменения if ($newTitle != $title) { $APPLICATION->SetPageProperty("title", $newTitle); } if ($newDescription != $description) { $APPLICATION->SetPageProperty("description", $newDescription); } }, false, 1000 );