С помощью API вы можете повлиять на IP-адрес пользователя, узнать геолокацию (страна, регион, город, координаты города) и получить местоположение из Интернет-магазина.

Получение IP:

$ip = \Bitrix\Main\Service\GeoIp\Manager::getRealIp();
if (\Bitrix\Main\Loader::includeModule("askaron.geo") )
{
  $ip = \Askaron\Geo\Info::getIp();
}

Получение Местоположения из интернет-магазина:

if (\Bitrix\Main\Loader::includeModule("askaron.geo") )
{
  $arLocation = \Askaron\Geo\Location::getLocation();
}


Получение геолокации:

Модуль содержит обработчик геолокаций. С помощью стандартного API 1C-Битрикс теперь можно получать геолокацию


$ip = \Bitrix\Main\Service\GeoIp\Manager::getRealIp();
if (\Bitrix\Main\Loader::includeModule("askaron.geo") )
{
  $ip = \Askaron\Geo\Info::getIp();
}

// Получить название города
$cityName = "";
$dataResult = \Bitrix\Main\Service\GeoIp\Manager::getDataResult( $ip, "ru");
if (is_object($dataResult))
{
  // geoData содержит всё, что вернул обработчик
  $cityName = $dataResult->getGeoData()->cityName;
}

// Или так:
// $cityName = \Bitrix\Main\Service\GeoIp\Manager::getCityName( $ip, "ru" );



Описание методов методы:

array \Askaron\Geo\Location::getLocation( $site_id = SITE_ID );

Метод возвращает местоположение из Интернет-магазина (sale)

Для правильной работы нужны Местоположения 2.0! Доступны с версии Битрикса 14.5.

Местоположение запоминается в сессии и куках. Повторно к базе IP адресов не обращаемся. Можете вызывать getLocation() много раз.

Необязательный параметр ID сайта. По умолчанию текущий сайт.

Функция возвращает массив, описывающий местоположение.

Если местоположение не найдено, и в настройках модуля не указан город по умолчанию, то возвращает пустой массив.

if (\Bitrix\Main\Loader::includeModule("askaron.geo") )
{
  $arLocation = \Askaron\Geo\Location::getLocation();
}


Результат:

Array
(
  [ID] => 218
  [CODE] => 0000073738
  [NAME_RU] => Москва
  [PARENT_ID] => 4
  [COUNTRY_ID] => 1
  [REGION_ID] => 3
)




bool \Askaron\Geo\Location::setLocationById( $id, $site_id = SITE_ID )

Метод устанавливает местоположение из интернет-магазина

$id — ID местоположения
$site_id - необязательный параметр. По умолчанию текущий сайт.

Старайтесь устанавливать местоположение из списка разрешенных местоположений для сайта ( http://ваш_сайт/bitrix/admin/sale_location_zone_list.php?lang=ru )

Возвращает true, если такое местоположение найдено и установлено. Иначе false.

Пример:

Метод можно использовать при переключении города в списке городов в шапке сайта:

<?
if ( \Bitrix\Main\Loader::includeModule("askaron.geo") )
{
    if ( $_REQUEST["mycity"] > 0 )
    {
        \Askaron\Geo\Location::setLocationById( $_REQUEST["mycity"] );
    }

    $arLocation = \Askaron\Geo\Location::getLocation();

    echo "Ваш город ".$arLocation["NAME_RU"];
}
?>



string \Askaron\Geo\Info::getIp();

Возвращает текущий IP-адрес аналогично стандартной функции $ip = \Bitrix\Main\Service\GeoIp\Manager::getRealIp();

На результат метода \Askaron\Geo\Info::getIp(); можно повлиять, если вызвать перед ним метод \Askaron\Geo\Info::setIp( $ip );



void \Askaron\Geo\Info::setIp( string $ip );

Используется для установки пользователю IP-адреса.

На редких хостингах администраторы прячут сайт за какими-то прокси серверами и определение адреса становится нестандартным.

Если у вас такой нестандартный случай можете попробовать установить IP в начале работы страницы.

Допустим, ваш системный администратор записывает адрес пользователя в переменную $_SERVER['HTTP_X_REAL_IP']

файл /bitrix/php_interface/init.php:

if (\Bitrix\Main\Loader::includeModule("askaron.geo") )
{
  \Askaron\Geo\Info::setIp( $_SERVER['HTTP_X_REAL_IP'] );
}

// далее новый $ip получаем методом \Askaron\Geo\Info::getIp();


array \Askaron\Geo\Info::getSxGeoCityFull($ip = '');
 
Получает город из базы Sypex Geo по IP. Результат запоминается в статическом кеше на хите. Можете вызывать getSxGeoCityFull() много раз на странице.

Если параметр $ip, если не задан, то берётся из \Askaron\Geo\Info::getIp();


!!! С версии askaron.geo 5.0.0 не рекомендуется использовать \Askaron\Geo\Info::getSxGeoCityFull() в своём коде. Есть другой способ

Теперь модуль устанавливает обработчик геолокации. Можно использовать геолокации Битрикса, в том числе другие обработчики вместе с нашим. getSxGeoCityFull вызывается внутри, если поиск в списке обработчиков дойдёт до нашего обработчика. 

$dataResult = \Bitrix\Main\Service\GeoIp\Manager::getDataResult( $ip, "ru");
!!! Если надо вывести Местоположение из интернет-магазина, то рекомендуем использовать \Askaron\Geo\Location::getLocation(). Это уже посчитанное готовое местоположение из сессии с учетом местоположения по умолчанию.

getSxGeoCityFull() возвращает массив описывающий город в базе по IP. В случае, если город не может быть найден, возвращает пустой массив.

if (\Bitrix\Main\Loader::includeModule("askaron.geo") )
{
     $arCity = \Askaron\Geo\Info::getSxGeoCityFull();
}


Результат:

Array
(
    [city] => Array
        (
            [id] => 501175
            [lat] => 47.23135
            [lon] => 39.72328
            [name_ru] => Ростов-на-Дону
            [name_en] => Rostov-na-Donu
        )

    [region] => Array
        (
            [id] => 501165
            [name_ru] => Ростовская область
            [name_en] => Rostovskaya Oblast'
            [iso] => RU-ROS
        )

    [country] => Array
        (
            [id] => 185
            [iso] => RU
            [lat] => 60
            [lon] => 100
            [name_ru] => Россия
            [name_en] => Russia
        )

)






0  


 Настройки модуля | Описание курса | Как обновить базу городов