dartLocation

Компонент dartLocation предназначен для установки местоположения пользователя по IP, Geolocation API и работает в связке с сервисом DaData.ru. Скачать компонент вы можете в репозитории modstore.pro. По умолчанию выводится блок со следующим содержимым:

dartLocation

При первой загрузке страницы уходит AJAX запрос на сервер с запросом местоположения пользователя. Сделано это специально, чтобы не скликивались бесплатные запросы DaData поисковыми роботами и краулерами. По умолчанию сначала ищет по IP адресу. Если же местоположение определилось некорректно, то, при нажатии кнопки «Нет, другой» происходит запрос местоположения пользователя на основе Geolocation API (при условии, что пользователь разрешил обработку запроса в браузере). Бывают случаи, когда местоположение все равно корректно определить не удалось, тогда его можно выбрать вручную из заполненных через панель администратора городов, либо начать заполнять их в поле поиска и выбрать из выпадающего списка. Поиск происходит на основе сервиса DaData.ru.

dartLocation

Возможности

По умолчанию все чанки и скрипты настроены на работу с 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.

dartLocation

При создании и редактировании города не заполняйте поле fias_id — оно заполнится автоматически.

dartLocation

При редактировании города появится новая вкладка «Дополнительные поля», где вы можете задать свои кастомные поля для каждого из городов. Они будут доступны по плесхолдеру [[!+dl.key]], где key — ключ поля.

dartLocation

Кроме того у каждого ресурса будет доступна вкладка «Города», где вы сможете настроить содержимое для каждого из городов.

dartLocation

Снипеты

В состав компонента входит два снипета: 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         // поле выбора города с подсказками

Планы

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

dartLocation

0 Число голосов: 4
5
5
1
4

Комментарии ()

  1. goodStar 11 января 2023, 17:44 # 0
    [[!+dl.key]]
    [[!+dl.fias_id]]
    [[!+dl.city]]
    [[!+dl.city_r]]
    [[!+dl.phone]]
    [[!+dl.email]]
    [[!+dl.address]]
    [[!+dl.address_full]]
    [[!+dl.default]]
    
    Подскажи пожалуста, как будет на fenom
    {$dl.phone}
    1. goodStar 11 января 2023, 17:45 # 0
      dl.phone, как будет на fenom !?
      1. Петропавловский Артем 11 января 2023, 17:55 # 0
        {$_modx->getPlaceholder("dl.phone")}
        аналогично другие плейсхолдеры
      2. Кирилл 07 апреля 2023, 15:59 # 0
        Прикольно, надо будет попробовать)

        Наши клиенты

        Многие компании уже доверяют нам. Будьте в их числе!

        Хотите реализовать проект?

        Контакты

        Напишите нам - мы расскажем вам много интересного!


        Пермь, шоссе Космонавтов 252, офис 218