Определение города (местоположения) по IP 2.0

JS классы

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

Отладка на клиентской стороне

В режиме отладки модуля (в настройках модуля стоит галочка - Отладка) в консоли браузера выводится подробная информация о текущих операциях и всплывающих событиях.

Вывод города в любом месте

Вы можете указать у нужных тегов класс js-bxmaker__geoip__city-name-global , в который автоматически подставится город и при клике по которому, появится окно для смены города, на странице обязательно должен быть размещен компонент bxmaker:geoip.city (Город + popup).

<div class="js-bxmaker__geoip__city-name-global"></div>

При использовании ajax и отображения тегов помеченных этим классом после загрузки страницы, чтобы повторно найти и вывести город, да подключить обработчики событий для смены города, необходимо вызвать метод

window.BXmakerGeoIPCity.showCity()

Перезагрузка страницы при смене города

Чтобы включить перезагрузку, нужно поставить галочку в настройках компонента bxmaker:geoip.city. Но на страницах оформления заказа перезагружаться по умолчанию ничего не будет, чтобы при смене города не потерять значения полей введенных пользователем в форме оформления заказа.

Чтобы работала смена города в форме заказа и не пропадали указанные пользователем значения, необходимо на странице разместить код ниже. В ORDER_PROP_1 - 1 это идентификатор свойства заказа, используемое как местоположение пользователя (города пользователя)

<script type="text/javascript">
    $(document).on('bxmaker.geoip.select.location.after', function(e, data){
         if (!!BX.Sale && !!BX.Sale.OrderAjaxComponent && !!BX.Sale.OrderAjaxComponent.sendRequest) {
    
             // чтобы не потерять значения заполненых полей
             $('input[name="ORDER_PROP_1"]').val(data.response.location_code);

             // бывает нужно вставить еще и в другие скрытые поля
             // $('input.bx-ui-sls-fake').val(data.response.location_code);

              // так как страница не перезагрузится, но отобразить на странице везде нужно новый город
             //window.BXmakerGeoIPCity.showCity(); 

             // теперь можно отправить данные формы для перерасчета
             BX.Sale.OrderAjaxComponent.sendRequest();
    
          }
          else if (!!BX.saleOrderAjax) {
             $('input[name="ORDER_PROP_1"]').val(data.response.location_code);
             // location.reload();
          }
    });

</script>

BXmakerGeoIPDeliveryManager

Класс используется для управления экземплярами класса BXmakerGeoIPDeliveryConstructor ( отдельный для каждого блока с информацией о доставке).

getItemByKey

Например чтобы получить экземпляр класса, у менеджера есть метод getItemByKey, параметров который нужно передать уникальный для каждого блока ключ, который можно найти в атрибутах html блока ( data-key="dfJOFt" )

var block = window.BXmakerGeoIPDeliveryManager.getItemByKey('dfJOFt');

setProductID

Далее чтобы перезагрузить сразу все блоки с доставкой на странице, есть метод setProductID, это необходимо когда стоимость доставки может отличаться для разных торговых предложений товара, например в карточке товара можно выбрать товары разного цвета, размера и тп.

// перезагрузит се блоки на странице
window.BXmakerGeoIPDelivery.setProductID(10); 

// обновление информации только в нужном блок
window.BXmakerGeoIPDelivery.setProductID(10, 'dfJQFt'); 

//или

block.setProductId(10); 

reload

Также есть метод, для перезагрузки блоков в нужный вам момент, по умолчанию все компоненты уже связаны и при наступлении события смены города, информация автоматически обновится - reload;

block.reload();

События класса

Класс генерирует следующие js события

  • bxmaker.geoip.delivery.reload.before
  • bxmaker.geoip.delivery.reload.after
$(document).on("bxmaker.geoip.delivery.reload.after', function(event, data) {
   console.log('bxmaker.geoip.delivery.reload.after: ', data);
});

BXmakerGeoIPMessageManager

Этот класс также является управляющим для экземпляров классов BXmakerGeoIPMessageConstructor (отдельный для каждого блока c геозависимым сообщением), упрощает использование геозависимых сообщения для второстипенных задач.

Получить объекты можно как по ключу так и по типу, для удобства, считается что типы на странице уникальны. (если разработчики не допустили ошибок и не вызвали компоненты с с одинаковым параметром типа - в этом случае будет возвращен последний объект).

var block = window.BXmakerGeoIPMessageManager.getItems('PHONE');

var block = window.BXmakerGeoIPMessageManager.getItemByKey('dgFhdJ');

//  обновление в нужный вам момент
block.reload(); 

// возвращает тип геозависимого сообщения
block.getType(); 

// возвращает ключ
block.getKey(); 

События класса

Класс генерирует следующие js события

  • bxmaker.geoip.message.reload.before
  • bxmaker.geoip.message.reload.after
$(document).on("bxmaker.geoip.message.reload.after', function(event, data) {
   console.log('bxmaker.geoip.message.reload.after: ', data);
});

BXmakerGeoIPCity

Это единственный экзепляр класса BXmakerGeoIPCityConstructor, который управляет отображением popup окна для смены города, выбора города, а также является основным инициатором события оповещающего другие связанные классы о смене города, о необходимости отобразить конкретный город или перезагрузить страницу.

Также используя этот класс можно получить актуальные данные о городе пользователя, городе, идентификаторе местоположения и так далее.

// отобразить окно для поиска и выбора города
window.BXmakerGeoIPCity.popupShow(); 
window.BXmakerGeoIPCity.popupHide();

// передаем идентификатор местоположения для смены города и сохранения всех данных на сервере
window.BXmakerGeoIPCity.selectLocation(id); 

// формирует данные, и вызывает событие отоображения города, все обработчики подписанные сменят в соответствующих местах сайта город на актуальный
window.BXmakerGeoIPCity.showCity(); 

// получение названия актуального города
window.BXmakerGeoIPCity.getCity();
window.BXmakerGeoIPCity.getCityId()

// возвращает идентификатор местоположения, как и метод 
window.BXmakerGeoIPCity.getLocation(); 

// возвращает код местоположения, вида 000045905
window.BXmakerGeoIpCity.getLocationCode();

window.BXmakerGeoIPCity.getCityId()

window.BXmakerGeoIPCity.getCountry();

window.BXmakerGeoIPCity.getCountryId();

// область
window.BXmakerGeoIPCity.getRegion(); 
window.BXmakerGeoIPCity.getRegionId();

// район
window.BXmakerGeoIPCity.getArea();  

// почтовый индекс
window.BXmakerGeoIPCity.getZip();

// широта и долгота
window.BXmakerGeoIPCity.getLat(); 
window.BXmakerGeoIPCity.getLng(); 

// диапазон ip адресов
window.BXmakerGeoIPCity.getRange(); 

// 0 или 1 , 0 если 0 значит ID  местоположения можно найти в базе сайта, если 1 значит город был найден через яндекс и на сайте включен поиск в яндексе,  на сайте нет местоположений ни текущего модуля, ни модуля интернет-магазин
window.BXmakerGeoIPCity.getYandex();

// установка или получение значения
window.BXmakerGeoIPCity.cookie(name, value, params)

// установит куку bxmaker.geoip_select=Y на 1 год
window.BXmakerGeoIPCity.cookie('select', 'Y'); 

// вернет значение куки bxmaker.geoip_select или undefined (если значение не установлено)
window.BXmakerGeoIPCity.cookie('select'); 

События класса

Класс генерирует следующие js события

  • bxmaker.geoip.city.change - в момент когда изменился город, и сохранены на сервере данные
  • bxmaker.geoip.city.show - в момент отображения актуального города, подписываемся чтобы изменить город дефолтный на актуальный в нужном месте сайта
  • bxmaker.geoip.select.location.before - перед отправкой на сервер данных о выбранном городе
  • bxmaker.geoip.select.location.success - сразу после успешной отправки данных о выбранном городе на сервер
  • bxmaker.geoip.select.location.after
  • bxmaker.geoip.search.start - делаем выхов события чтобы отобразить окно для поиска города
  • bxmaker.geoip.search.after - после поиска города, например можно скрыть ненужны
  • bxmaker.geoip.popup.show.before - перед показом окна поиска и выбора города
  • bxmaker.geoip.popup.show.after
  • bxmaker.geoip.popup.hide.before - перед закрытием окна поиска и выбора города
  • bxmaker.geoip.popup.hide.after
  • bxmaker.geoip.city.yandex.defined - определен город полльзователя используя сервисы Яндекса
$(document).on("bxmaker.geoip.city.change", function(r, data){
  console.log('bxmaker.geoip.city.change: ', data);

});