[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
1
3 358
+7
Поблагодарить автора Отправить деньги

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

Евгений 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
          Александр
          06 февраля 2020, 21:51
          0
          Здраствуйте подойдет ли ваш компонент для такой задачи: Показывать пользователю город не надо, надо просто определить автоматически регион и в соответствии с регионом выводить соответствующие контакты? Спасибо
            Maksim
            21 августа 2020, 14:17
            0
            Скажите пожалуйста, а чем этот отличается от вашего же GeoLocation? чем он лучше, ведь тот бесплатен?
              Сергей
              11 марта 2021, 22:02
              0
              Здраствуйте компонент не работает, если пользователь аноним.
                Александр Туниеков
                11 апреля 2022, 07:03
                0
                Компонент подстава полная. Установил и страница вместо 1,5 стала грузиться 6 сек. Вывел выбор города и страница грузиться за 16!!! сек. Это что-за беспредел??!!! От вас Володя я такого не ожидал. Объясните почему такие тормоза? И как с ними бороться? И в это должно быть в описании компонента!!!
                  Николай Савин
                  11 апреля 2022, 11:34
                  0
                  Вы пробовали создать тикет в техподдержке магазина?
                    Александр Туниеков
                    11 апреля 2022, 13:24
                    0
                    Это просто крик души. Обманулся в ожиданиях. Тикет конечно создадим.
                      Николай Савин
                      11 апреля 2022, 13:28
                      0
                      Кричать на людей не разобравшись такое себе занятие. Возможно проблема в чем то еще. Автор за ваши ожидания не в ответе.
                        Александр Туниеков
                        11 апреля 2022, 13:36
                        0
                        Автор в ответе за то что он написал. В описании ни слова о таких задержках. И это его косяк.
                          Николай Савин
                          11 апреля 2022, 13:39
                          0
                          Александр поговорите, пожалуйста, с Автором о его «косяках» в техподдержке магазина. Портал modx.pro к магазину не относится. Не нужно здесь на людей кричать. Тем более бездоказательно.
                            Александр Туниеков
                            11 апреля 2022, 13:59
                            0
                            Портал modx.pro к магазину не относится.
                            Здесь есть описание и комментарии к компонентам в магазине. Так что думаю портал к магазину относиться. Второе отзывы с модсторе давно убрали. Ругать авторов Делиться впечатлениями об компонентах больше негде.
                            Третье. Задержка выдачи страницы больше, чем на секунду не допустима. Любой компонент, что подобное вообще допускает бесполезен.
                            И четвертое. В жизни бывает всякое. Бывает и нужно поругаться. Конечно не доводя до «ты дебил», но слишком благостным быть не стоит. Это не жизнеспособно, на мой взгляд. Вообщем сообществу, на мой взгляд, нужно уметь разрешить конфликты, а не гасить из в зародыше и тем самым переводя конфликты в тихую но злобную :-) фазу.
                              Николай Савин
                              11 апреля 2022, 14:06
                              0
                              Вы не впечатлениями делитесь, а просто собачитесь со мной, даже не удосужившись
                              создать тикет, разобраться в ситуации. В общем мы с вами пожалуй попрощаемся. Заблокировал вас на день. Остыньте пожалуйста
                  Артур
                  17 мая 2022, 17:06
                  0
                  Скажите пожалуйста с помощью этого дополнении я смогу хотя бы полуавтоматизировать (автоматизировать) переход пользователя на поддомен региона посетителя?
                    Артур Шевченко
                    17 мая 2022, 22:39
                    0
                    Компонент определяет местоположение пользователя, а что с этой информацией делать решать вам. Если надо сменить домен, значит нужен редирект.
                      Артур
                      17 мая 2022, 23:09
                      0
                      Ладно выражусь яснее как это реализовать? на modhost тестировал, но я не увидел там ничего похожего! я бы купил даже этот плагин, но если надо дорабатывать, напрашивается вопрос целесообразности такого решения
                        Артур Шевченко
                        17 мая 2022, 23:19
                        0
                        Напишите в раздел работы или сюда ребята, кто свободен, предложат и варианты реализации и цены.
                    Виталий
                    28 декабря 2022, 19:14
                    0
                    Всех приветствую. Удалось ли как то решить проблему с задержкой на фронте от компонента, тикет уже не создать, так как давно покупал. А тут решил протестировать и понял что даже просто если установить компонент и открыть пустую страницу тестовую, то задержка действительно доходит до 5 секунд. После удаления все в норме. Как вообще можно отследить где задержка? DebugParser не показывает запросы такие.
                      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                      27