/
bitrix-dev
/
Starter-kit
Обзор
Документация
Войти
/
bitrix-dev
/
Starter-kit
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
main
local/php_interface/init/Handlers/LocationHandler.php
99 строк
3 KB
Alexey Karizhenskiy
Первая сборка (из ранее используемого)
19 янв 2026, 21:00
19 янв 2026, 21:00
d843e36
Код
Авторство
О чём код?
<?php /* * Created by PhpStorm. * @author: AlexeyS <Karizhenskiy@bk.ru> * @date: 2025.01.22 */ class LocationHandler { /** * Обработчик. Вызывается при загрузке страницы. * Установка региона в сессию. */ public static function OnProlog() { $locationData = \MWI\Location\Session::getLocation(); if (!empty($locationData)) { $cityName = $locationData['NAME'] ?? ''; if (!empty($cityName)) { $_SESSION['REGIONALITY']['REGION']['NAME'] = $cityName; } } } /** * Обработчик. Вызывается после отрисовки контента. * Замена макросов в контенте сайта. * @param string $content Отрисованный контент страницы. */ public static function OnEndBufferContent(&$content) { $locationData = \MWI\Location\Session::getLocation(); if (!empty($locationData['NAME'])) { $content = str_replace('#REGIONALITY_REGION_NAME#', $locationData['NAME'], $content); } } /** * Обработчик. Вызывается для обработки свойств заказа компонента. * Определение местоположения в соответствии с регионом. * @param array $userResult * @param \Bitrix\Main\HttpRequest $request * @param array $parameters * @param array $result */ public static function OnSaleComponentOrderProperties(&$userResult, $request, &$parameters, &$result) { $personType = $userResult['PERSON_TYPE_ID'] ?? null; if (empty($personType)) { return; } $isSetLocation = false; $zipPropId = null; $locationPropId = null; // Получаем свойства заказа для данного типа клиента $rsProperty = \Bitrix\Sale\Internals\OrderPropsTable::getList([ 'filter' => [ 'ACTIVE' => 'Y', 'PERSON_TYPE_ID' => $personType ], 'cache' => [ 'ttl' => 3600000 ] ]); while ($property = $rsProperty->fetch()) { if ($property['IS_LOCATION'] === 'Y') { $locationPropId = $property['ID']; } if ($property['CODE'] === 'ZIP') { // Устанавливать только доставка курьером - определить текущую доставку?? // $zipPropId = $property['ID']; } } // Если есть индекс, то устанавливаем местоположение по индексу if (!empty($zipPropId) && !empty($userResult['ORDER_PROP'][$zipPropId])) { $location = CSaleLocation::GetByZIP($userResult['ORDER_PROP'][$zipPropId]); if (!empty($location)) { $userResult['ORDER_PROP'][$locationPropId] = $location['CODE']; $isSetLocation = true; } } // Если нет индекса, то устанавливаем местоположение из сессии if (!empty($locationPropId) && !$isSetLocation) { $locationData = \MWI\Location\Session::getLocation(); if (!empty($locationData['CODE']) && \Bitrix\Main\Loader::includeModule('sale')) { $userResult['ORDER_PROP'][$locationPropId] = $locationData['CODE']; } } } }