Для каждого компонента написан свой класс, используя методы которого можно выполнить ту или иную задачу. Далее приводиться краткое описание класса и доступных методов.
В режиме отладки модуля (в настройках модуля стоит галочка - Отладка) в консоли браузера выводится подробная информация о текущих операциях и всплывающих событиях.
Вы можете указать у нужных тегов класс 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>
Класс используется для управления экземплярами класса BXmakerGeoIPDeliveryConstructor
( отдельный для каждого блока с информацией о доставке).
Например чтобы получить экземпляр класса, у менеджера есть метод getItemByKey
, параметров который нужно передать уникальный для каждого блока ключ, который можно найти в атрибутах html блока ( data-key="dfJOFt"
)
var block = window.BXmakerGeoIPDeliveryManager.getItemByKey('dfJOFt');
Далее чтобы перезагрузить сразу все блоки с доставкой на странице, есть метод setProductID
, это необходимо когда стоимость доставки может отличаться для разных торговых предложений товара, например в карточке товара можно выбрать товары разного цвета, размера и тп.
// перезагрузит се блоки на странице
window.BXmakerGeoIPDelivery.setProductID(10);
// обновление информации только в нужном блок
window.BXmakerGeoIPDelivery.setProductID(10, 'dfJQFt');
//или
block.setProductId(10);
Также есть метод, для перезагрузки блоков в нужный вам момент, по умолчанию все компоненты уже связаны и при наступлении события смены города, информация автоматически обновится - 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);
});
Этот класс также является управляющим для экземпляров классов 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);
});
Это единственный экзепляр класса 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);
});