Как установить местоположение по умолчанию в процедуре заказа

Июль 4, 2018

Теги: Как это сделать?, Магазин

Иногда необходимо установить конкретное местоположение по умолчанию в процедуре заказа (компонент "sale.order.ajax"), например, если город уже выбран пользователем при первом заходе на сайт.

Для этого можно воспользоваться событием "OnSaleComponentOrderProperties".

Предположим, что у нас уже установлена константа "CURRENT_CITY_CODE", в которой содержится код местоположения модуля интернет-магазина (например, "0000625079").

Создадим обработчик события, который будет устанавливать местоположение из константы, если оно еще не было изменено пользователем:


\Bitrix\Main\EventManager::getInstance()->addEventHandlerCompatible
    
'sale'
    
'OnSaleComponentOrderProperties'
    
'SaleOrderEvents::fillLocation'
); 

class 
SaleOrderEvents 
{
    function 
fillLocation(&$arUserResult$request, &$arParams, &$arResult
    {
        
$registry = \Bitrix\Sale\Registry::getInstance(\Bitrix\Sale\Registry::REGISTRY_TYPE_ORDER);
        
$orderClassName $registry->getOrderClassName();
        
$order $orderClassName::create(\Bitrix\Main\Application::getInstance()->getContext()->getSite());
        
$propertyCollection $order->getPropertyCollection();

        foreach (
$propertyCollection as $property)
        {
            if (
$property->isUtil())
                continue;
            
$arProperty $property->getProperty();
            if(
                
$arProperty['TYPE'] === 'LOCATION' 
                
&& array_key_exists($arProperty['ID'],$arUserResult["ORDER_PROP"])
                && !
$request->getPost("ORDER_PROP_".$arProperty['ID'])
                && (
                    !
is_array($arOrder=$request->getPost("order"))
                    || !
$arOrder["ORDER_PROP_".$arProperty['ID']]
                )
            ) {
                
$arUserResult["ORDER_PROP"][$arProperty['ID']] = CURRENT_CITY_CODE;
            }
        }
    }
}

См. также:

← Переход к списку