Как настроить автозаполнение местоположения в заказе bitrix:sale.order.ajax

Внимание! Работает режим премодерации. Все сообщения публикуются после проверки!
Страницы: 1
Ответить
RSS
Как настроить автозаполнение местоположения в заказе bitrix:sale.order.ajax
Автозаполнение местоположения пользователя в bitrix:sale.order.ajax: определяем город и подставляем его в заказ

В интернет-магазине каждый лишний клик снижает конверсию. Один из самых  раздражающих моментов — выбор города в форме оформления заказа. В Bitrix  bitrix:sale.order.ajax это свойство типа LOCATION.  В статье показываю, как автоматически подставлять местоположение  покупателя в это поле: сначала — полный рабочий код (он ниже), затем  разберём логику, тонкости и еще один более надёжный, «битриксовый»  апгрейд.
Изменено: Валерий Макеев - 29.09.2025 14:33:35
Автоматически подставляет город в поле LOCATION при оформлении заказа, определяя его по IP-адресу клиента через встроенный GeoIP-менеджер Битрикс, но только если пользователь ещё не выбрал город вручную.
Код
<?php
// /local/php_interface/init.php
use Bitrix\Main\EventManager;
use Bitrix\Main\Service\GeoIp\Manager;
use Bitrix\Sale\Location\LocationTable;

AddEventHandler('sale', 'OnSaleComponentOrderProperties', 'autoFillLocationByGeoIp');

function autoFillLocationByGeoIp(&$arUserResult, $request, &$arParams, &$arResult)
{
    foreach ($arUserResult['ORDER_PROP'] as $propertyId => $value) {
        $property = \CSaleOrderProps::GetList([], ['ID' => $propertyId])->Fetch();
        if ($property['TYPE'] === 'LOCATION' && empty($request->getPost("ORDER_PROP_{$propertyId}"))) {
            static $cityCode = null;
            if ($cityCode === null) {
                $ip = $_SERVER['HTTP_X_REAL_IP'] ?? $_SERVER['REMOTE_ADDR'];
                $geoData = Manager::getDataResult($ip, LANGUAGE_ID);
                if ($geoData->isSuccess() && $cityName = $geoData->getGeoData()->cityName) {
                    $location = LocationTable::getList([
                        'select' => ['CODE'],
                        'filter' => [
                            '=NAME.NAME' => $cityName,
                            'LANGUAGE_ID' => LANGUAGE_ID,
                            '=TYPE.CODE' => 'CITY'
                        ],
                        'limit' => 1
                    ])->fetch();
                    $cityCode = $location['CODE'] ?? false;
                } else {
                    $cityCode = false;
                }
            }
            if ($cityCode) {
                $arUserResult['ORDER_PROP'][$propertyId] = $cityCode;
            }
        }
    }
}
Страницы: 1
Ответить
Форма ответов
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
 

Стоимость услуг по разработке и сопровождению сайтов на 1C-Битрикс

Разработка корпоративного сайта

от 7 дней

от 40 000 рублей

Разработка сайта без системы оплаты заказов через корзину

* стоимость зависит от наличия верстки, использования готового решения и т.д.

Лечение сайтов от вирусов

восстановление сайта и подъем версии PHP

от 25 000 рублей
Лечение сайтов на решениях АСПРО и прочих.

* полный комплекс лечения проекта и закрытия дыр

Интернет-магазин на готовом решении

от 7 дней

от 40 000 рублей
запуск сайта в максимально короткие сроки

* указана минимальная стоимость. Стоимость выбранной лицензии «1С-Битрикс» оплачивается отдельно.