Разное

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

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

Как это сделать — можно узнать из этой статьи.

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

Если у вас задана, например, константа «CURRENT_CITY», в которой содержится код местоположения модуля интернет-магазина (например, «00001111111»), то код будет такой:

\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;

            }
        }
    }
}

В коде строкой

$arUserResult["ORDER_PROP"][$arProperty['ID']] = CURRENT_CITY; 

устанавливается в свойство типа LOCATION код города из CURRENT_CITY.

Отставить комментарий

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

двадцать − девятнадцать =