Компонент dartLocation предназначен для установки местоположения пользователя по IP, Geolocation API и работает в связке с сервисом DaData.ru. Скачать компонент вы можете в репозитории modstore.pro. По умолчанию выводится блок со следующим содержимым:
При первой загрузке страницы уходит AJAX запрос на сервер с запросом местоположения пользователя. Сделано это специально, чтобы не скликивались бесплатные запросы DaData поисковыми роботами и краулерами. По умолчанию сначала ищет по IP адресу. Если же местоположение определилось некорректно, то, при нажатии кнопки «Нет, другой» происходит запрос местоположения пользователя на основе Geolocation API (при условии, что пользователь разрешил обработку запроса в браузере). Бывают случаи, когда местоположение все равно корректно определить не удалось, тогда его можно выбрать вручную из заполненных через панель администратора городов, либо начать заполнять их в поле поиска и выбрать из выпадающего списка. Поиск происходит на основе сервиса DaData.ru.
Возможности
По умолчанию все чанки и скрипты настроены на работу с Bootstrap 4. Переписать под любое другое окружение не составляет труда. Нужно просто заменить пути до файлов в системных настройках dartlocation_frontend_css и dartlocation_frontend_js. Также нужно зарегистрироваться в сервисе DaData.ru и найти в личном кабинете ключи API по инструкции и ввести их в системных настройках dartlocation_api_key_dadata и dartlocation_secret_key_dadata.
Панель администратора
В панели администратора вы можете создать уже предустановленные города для вывода. К ним можно привязать контактные данные, которые будут доступны в соответствующих плейсхолдерах:
[[!+dl.key]] [[!+dl.fias_id]] [[!+dl.city]] [[!+dl.city_r]] [[!+dl.phone]] [[!+dl.email]] [[!+dl.address]] [[!+dl.address_full]] [[!+dl.default]]
Префикс плейсхолдеров «dl.» вы можете сменить с помощью системной настройки dartlocation_phx_prefix.
При создании и редактировании города не заполняйте поле fias_id — оно заполнится автоматически.
При редактировании города появится новая вкладка «Дополнительные поля», где вы можете задать свои кастомные поля для каждого из городов. Они будут доступны по плесхолдеру [[!+dl.key]], где key — ключ поля.
Кроме того у каждого ресурса будет доступна вкладка «Города», где вы сможете настроить содержимое для каждого из городов.
Снипеты
В состав компонента входит два снипета: dl.geo_data и dl.get_cities. dl.geo_data — это основной снипет, который выводит информацию о местоположении пользователя. Для того, чтобы компонент заработал, достаточно вызвать его НЕкешируемым в определенном месте макета, например, в шапке:
[[!dl.geo_data]]
Снипет принимает следующие параметры:
Параметр | Значение по умолчанию | Описание |
---|---|---|
tpl | dl.geodata | Чанк вывода местоположения пользователя |
modal_tpl | dl.modal | Чанк модального окна |
toPlaceholder | 0 | В какой плейсхолдер вывести результат работы снипета |
Снипет sl.geo_data формирует следующие плейсхолдеры:
[[!+dl.city]] // наименование города [[!+dl.fias_id]] // ФИАС города
Остальная информация по местоположению храниться в массиве $_SESSION['dartlocation'][$ctx], где $ctx — текущий контекст. Примерное содержимое слудующее:
<?php $_SESSION['dartlocation'] = array ( [web] => Array ( [postal_code] => 664000 [country] => Россия [country_iso_code] => RU [federal_district] => Сибирский [region_fias_id] => 6466c988-7ce3-45e5-8b97-90ae16cb1249 [region_kladr_id] => 3800000000000 [region_iso_code] => RU-IRK [region_with_type] => Иркутская обл [region_type] => обл [region_type_full] => область [region] => Иркутская [area_fias_id] => [area_kladr_id] => [area_with_type] => [area_type] => [area_type_full] => [area] => [city_fias_id] => 8eeed222-72e7-47c3-ab3a-9a553c31cf72 [city_kladr_id] => 3800000300000 [city_with_type] => г Иркутск [city_type] => г [city_type_full] => город [city] => Иркутск [city_area] => [city_district_fias_id] => [city_district_kladr_id] => [city_district_with_type] => [city_district_type] => [city_district_type_full] => [city_district] => [settlement_fias_id] => [settlement_kladr_id] => [settlement_with_type] => [settlement_type] => [settlement_type_full] => [settlement] => [street_fias_id] => [street_kladr_id] => [street_with_type] => [street_type] => [street_type_full] => [street] => [stead_fias_id] => [stead_cadnum] => [stead_type] => [stead_type_full] => [stead] => [house_fias_id] => [house_kladr_id] => [house_cadnum] => [house_type] => [house_type_full] => [house] => [block_type] => [block_type_full] => [block] => [entrance] => [floor] => [flat_fias_id] => [flat_cadnum] => [flat_type] => [flat_type_full] => [flat] => [flat_area] => [square_meter_price] => [flat_price] => [postal_box] => [fias_id] => 8eeed222-72e7-47c3-ab3a-9a553c31cf72 [fias_code] => [fias_level] => 4 [fias_actuality_state] => 0 [kladr_id] => 3800000300000 [geoname_id] => 2023469 [capital_marker] => 2 [okato] => 25401000000 [oktmo] => 25701000001 [tax_office] => 3800 [tax_office_legal] => 3800 [timezone] => [geo_lat] => 52.286387 [geo_lon] => 104.28066 [beltway_hit] => [beltway_distance] => [metro] => [divisions] => [qc_geo] => 4 [qc_complete] => [qc_house] => [history_values] => [unparsed_parts] => [source] => [qc] => [pls] => array ( [citycheck] => 0 [city] => г Иркутск [fias_id] => 8eeed222-72e7-47c3-ab3a-9a553c31cf72 )
Снипет для вывода списка городов, заполненных в панели администратора:
[[!dl.geo_cities]]
Принимает следующие параметры:
Параметр | Значение по умолчанию | Описание |
---|---|---|
tpl | dl.cities | Чанк вывода местоположения пользователя |
Чанки
Компонент включает в себя три чанка. Первый dl.geodata отвечает за вывод местоположения пользователя. Второй dl.modal — модальное окно выбора города. Третий dl.cities — список городов.
Будьте внимательны при модернизации чанков. В них используются следующие селекторы:
.dl_wrap // обертка, без нее не заработают JS скрипты .dl_city_close // кнопка закрытия всплывающего окна уточнения также должна иметь класс city_checked .dl_city_more_info // кнопка вызова Geolocation API .city_checked // выбор города .city_complete // поле выбора города с подсказками
Планы
В планах в данный компонент включить группировку городов по региону и алфавиту. Добавить системные события при выборе города. Также, возможно, в этот компонент войдет список адресов доставки пользователя, чтобы можно было выбирать адрес доставки в корзине одним/двумя кликами.