Временный костыль для определения текущего региона заказ и передачи его в свойство заказа.
<?
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"]
Добавить комментарий