/
bitrix-dev
/
Starter-kit
Обзор
Документация
Войти
/
bitrix-dev
/
Starter-kit
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
main
local/php_interface/classes/mwi/Location/Session.php
144 строки
5 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 */ namespace MWI\Location; use Bitrix\Main\Loader; use Bitrix\Sale\Location; use MWI\Location\Search; class Session { /** * Получить ID местоположения из сессии * @return int ID местоположения */ public static function getId(): int { // Получить ID местоположения из сессии if (!empty($_SESSION['LOCATION_ID'])) { return $_SESSION['LOCATION_ID']; } // Получить ID местоположения из куки $request = \Bitrix\Main\Application::getInstance()->getContext()->getRequest(); $cookieValue = $request->getCookie("LOCATION_ID"); if (!empty($cookieValue)) { return $cookieValue; } return 0; } /** * Установить ID местоположения в сессию * @param int $locationId ID местоположения * @return void */ public static function setId(int $locationId): void { // Установить ID местоположения в сессию $_SESSION['LOCATION_ID'] = $locationId; // Установить ID местоположения в куку $cookie = new \Bitrix\Main\Web\Cookie("LOCATION_ID", $locationId, time() + 86400 * 30); $cookie->setSpread(\Bitrix\Main\Web\Cookie::SPREAD_DOMAIN); $cookie->setDomain(\Bitrix\Main\Application::getInstance()->getContext()->getRequest()->getHttpHost()); $cookie->setPath("/"); $cookie->setSecure(false); $cookie->setHttpOnly(false); \Bitrix\Main\Application::getInstance()->getContext()->getResponse()->addCookie($cookie); if ($locationId) { // Найти город и записать в сессию $arLocation = self::getLocation(); if (!empty($arLocation['NAME'])) { $_SESSION['REGIONALITY']['REGION']['NAME'] = $arLocation['NAME']; } } } /** * Получить информацию о местоположении * @return array Массив с данными о местоположении: * - ID - ID местоположения * - NAME - Название города * - REGION_ID - ID региона * - REGION_NAME - Название региона * - REGIONALITY_REGION_ID - ID региона в модуле regionality */ public static function getLocation(): array { $locationId = self::getId(); if (empty($locationId) || !Loader::includeModule('sale')) { return []; } // Параметры фильтрации $arFilter = [ '=NAME.LANGUAGE_ID' => LANGUAGE_ID, '=ID' => $locationId, ]; // Выбираемые поля $arSelect = [ '*', 'ID' => 'ID', 'CODE' => 'CODE', 'REGION_ID' => 'REGION_ID', 'NAME_RU' => 'NAME.NAME', 'TYPE_CODE' => 'TYPE.CODE', ]; // Получаем информацию о городе $res = Location\LocationTable::getList([ 'filter' => $arFilter, 'select' => $arSelect, 'limit' => 1, 'order' => ['NAME.NAME' => 'ASC'], 'cache' => [ 'ttl' => 3600000 ] ]); if ($item = $res->fetch()) { $arResult = [ 'ID' => $item['ID'], 'CODE' => $item['CODE'], 'NAME' => $item['NAME_RU'], 'REGION_ID' => $item['REGION_ID'], 'REGION_NAME' => '', 'REGIONALITY_REGION_ID' => Search::getRegionalityRegionIdByCityName($item['NAME_RU']), ]; // Если есть регион, получаем его название if (!empty($item['REGION_ID'])) { $region = Location\LocationTable::getList([ 'filter' => [ '=NAME.LANGUAGE_ID' => LANGUAGE_ID, '=ID' => $item['REGION_ID'], ], 'select' => [ 'NAME_RU' => 'NAME.NAME', ], 'cache' => [ 'ttl' => 3600000 ] ])->fetch(); if (!empty($region)) { $arResult['REGION_NAME'] = $region['NAME_RU']; } } return $arResult; } return []; } }