[UserLocation] - Геолокация и выбор города пользователя

Компонент [UserLocation] позволяет определить локацию пользователя и вывести список доступных локаций.



Особенности
— определение локации пользователя по ip
— готовая база городов и регионов России, возможность импорта/ экспорта своих локаций
— в отличие от CitySelect оперирует локациями созданными в базе данных. Позволяет добавить/ изменить нужную локацию под себя.

Установка
Подключите наш репозиторий
— Установите UserLocation
— Импортируйте файл локаций

Сниппет UserLocation.initialize
Подключает необходимые скрипты и стили. Вызвать в любом удобном месте.

Сниппет UserLocation.location
Получает список локаций

Модификаторы феном
— getUserLocation — получает текущую локацию пользователя
— detectUserLocation — получает текущую локацию пользователя по его ip

Пример вызова, текущая локация пользователя
{set $location = ''|getUserLocation}
    {$location|print}

    (
    [id] => 3300000400000
    [name] => Ковров
    [type] => city
    [postal] => 601900
    [gninmb] => 3332
    [okato] => 17425000000
    [oktmo] => 17725000
    [fias] => 0b4978e2-e64c-4db1-b84d-93cf34bdb04b
    [active] => 1
    [parent] => 3300000000000
    [resource] => 0
    [description] =>
    [properties] =>
    [confirmed] => 0
    )

Пример вызова, поповер с выбором локации
{set $location = ''|getUserLocation}

    <div class="userlocation userlocation-location-confirm {$location.confirmed?'':'unconfirmed'}">
        <a href="javascript:" data-fancybox="" data-src="#userlocation-location-popup">{$location.name}</a>
        <div class="userlocation-location-confirm-popover">
            <div>Это Ваш город?</div>
            <div>
                <a href="" class="userlocation-location-item" data-userlocation-id="{$location.id}">Да</a>
                <a href="javascript:" data-fancybox="" data-src="#userlocation-location-popup">Выбор города</a>
            </div>
            <button class="userlocation-location-confirm-close"></button>
        </div>
    </div>
    <div id="userlocation-location-popup" style="display: none">
        <h4>Выберите свой населённый пункт</h4>
        {'UserLocation.location'|snippet:[
        'typeSearch' => 'local',
        'tpl' => 'UserLocation.locations'
        ]}
    </div>

Пример вызова, инпут с выбором локации
<input type="text" class="userlocation-location-search-input "
           data-userlocation-mode="remote"
           data-userlocation-template="<div class='userlocation-suggestion userlocation-location-item' data-userlocation-row='@row@' data-userlocation-id='@id@'>@name@</div>"
           data-userlocation-value-field="name"
           data-data-type="city"
           placeholder="Поиск...">

Вывод соседних локаций
{set $location = ''|detectUserLocation}
{if $location}
    {set $tmp = '!UserLocation.location'|snippet:[
    'limit' => 1,
    'where' => ['parent:IN' => [$location.parent,$location.id],'OR:id:IN' => [$location.parent,$location.id]]
    ]}
{/if}

Управление локациями в админке
Таблица управления локациями представлена в виде виджета



Доступен импорт/ экспорт локаций в формате csv



Геолокация пользователя

Из коробки доступны следующие классы определения локации пользователя по ip
— ulDetectLocationByIpGeoBase — включен по умолчанию
— ulDetectLocationBySypexGeo
— ulDetectLocationByDaData

Используемый класс геолокации можно указать в настройке ulMethodDetectLocation
Наиболее точный класс ulDetectLocationByDaData, однако он требует регистрации и указания токена сервиса ДаДата

Примечание
По умолчанию активны крупные города России, вы можете активировать/ деактивировать нужные вам города

Файл локации городов и регионов Росии находится в папке
core/components/userlocation/elements/locations/locations.csv

Купить [UserLocation]
Володя
22 октября 2019, 09:01
modx.pro
437
+7
Поблагодарить автора Отправить деньги

Комментарии: 11

Евгений Webinmd
22 октября 2019, 10:27
+1
ссылка не правильная
    Володя
    22 октября 2019, 10:38
    +1
    поправил, спасибо!
    Павел Бигель
    06 ноября 2019, 11:09
    0
    Кажется от вас же был компонент, который давал возможность без контекстов, в зависимости от локации выводить региональные цены minishop2 и прочую информацию. Умеет ли это данный компонент?
      Володя
      06 ноября 2019, 11:18
      0
      Кажется

      кажется, не было.

      в зависимости от локации выводить региональные цены minishop2

      нет

      прочую информацию
      легко
      {set $location = ''|detectUserLocation}
      {if $location.name == 'название_локации'}
         ...
      {/if}
      Viktor
      08 ноября 2019, 05:31
      0
      на модхосте нет дополнения в списке предустановок
        Володя
        08 ноября 2019, 07:34
        0
          Viktor
          08 ноября 2019, 07:37
          0
          а в меню переустановки нет
            Володя
            08 ноября 2019, 07:42
            0
            есть
              Viktor
              08 ноября 2019, 07:49
              0
              у меня доступно только 192 дополнения, это из-за тарифа? тариф «разработка»
                Viktor
                08 ноября 2019, 07:53
                0
                нашел причину, странно.
                  Володя
                  08 ноября 2019, 07:53
                  0
                  Все дополнения доступны на тарифе — Тестовый.
                  На всех других тарифах доступны бесплатные дополнения, платные вы можете переустановить через
                  Менеджер пакетов в админке MODX
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          11