Определяем регион в АСПРО.МАКС из сессии

Временный костыль для определения текущего региона заказ и передачи его в свойство заказа.

<?
use Bitrix\Main;
//работаем с событием перед сохранением заказа
Main\EventManager::getInstance()->addEventHandler(
    'sale',
    'OnSaleOrderSaved',
    array('CustomOrderClass','orderAddRegion')
);
class CustomOrderClass
{
    static function orderAddRegion(Main\Event  $event)
    {
//обращаемся к сессии
        $session = Bitrix\Main\Application::getInstance()->getSession();
//достаем из нее регион АСПРО. Регионы идут  как ID, поэтому далее перебираем их
        $region_code = $GLOBALS['arRegion']['ID'];
        $region_name ="Город по умолчанию";
        if (CModule::IncludeModule("iblock")):
//получаем из инфоблока регионов, регионы сайта и их ID
            $iblock_id = 9;
            $element = CIBlockElement::GetList (
                Array("ID" => "ASC"),
                Array("IBLOCK_ID" => $iblock_id),
                false,
                false,
                Array('ID', 'NAME')
            );
            while($ar_fields = $element->GetNext())
            {
                if ($ar_fields['ID'] === $region_code)
                    $region_name = $ar_fields['NAME'];
            }
        endif;
        //обращаемся к заказу
        $order = $event->getParameter("ENTITY");
        //если новый заказ ищем свойство заказа с кодом CITY и LOCATION
        if($event->getParameter("IS_NEW")){
            $propertyCollection = $order->getPropertyCollection();
            foreach ($propertyCollection as $obProp) {
                $arProp = $obProp->getProperty();
                if(in_array($arProp["CODE"], ["CITY"])) {
                    $obProp->setValue($region_name);
                }
            }
            $order->save();
        }
    }
}
?>

Была проверка по сессии, но в шаблоне ASPRO используют глобальные переменные, перевел код на $GLOBALS['arRegion']['ID']
Другие варианты:
$GLOBALS["arRegionLink"]["PROPERTY_LINK_REGION"]
$_SESSION["ASPRO_FILTER"]["arRegionLink"]["PROPERTY_LINK_REGION"]

Оцените документ
Обновлено 03.02.2025

Один комментарий на ««Определяем регион в АСПРО.МАКС из сессии»»

  1. Аватар пользователя Владимир

    Обращение по ID
    $arProp = $propertyCollection->getItemByOrderPropertyId(13);

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *