Июль 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;
}
}
}
}