JS классы

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

Отладка на клиентской стороне (в браузере пользователя)

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

Показ города в любом месте сайта

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

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

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

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

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

<script type="text/javascript">
    $(document).on('bxmaker.geoip.select.location.success', 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(r.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(), параметров который нужно передать уникальный для каждого блока ключ, который можно найти в аттрибутах html блока ( data-key="fgodfgo" )

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

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

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

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

//или

block.setProductId(10);

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

block.reload();
События  класса

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(); // возвращает ключ

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

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);
});


Класс window.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(); - возвращает идентификатор местоположения, как и метод
window.BXmakerGeoIpCity.getLocationCode(); - возвращает код местоположения, вида 000045905
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(); - шировта и долгота 

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

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


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

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




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

$(document).on("bxmaker.geoip.city.change", function(r, data){
  cconsole.log('bxmaker.geoip.city.change: ', data);

});


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 - определен город полльзователя используя сервисы Яндекса