Бесплатно
Загрузите дополнение из админки вашего сайта.
Как загрузить?
Как загрузить?
Версия
1.0.0-pl
Дата выпуска
31.08.2026
Загрузки
0
Просмотры
37
Внимание, этот компонент требует PHP
8.2
или выше!
Внимание, этот компонент требует MODX 3 или выше.
Компонент GeoLocation2 позволяет определить город посетителя и вывести список доступных городов.
Особенности
Установка
Сниппет GeoLocation2Initialize — Подключает web-ассеты и конфигурацию. Вызвать в любом удобном месте.
Сниппет GeoLocation2Current — Текущее состояние города и confirmed.
Сниппет GeoLocation2Modal — UI выбора и подтверждения города.
Сниппет GeoLocation2Location — Определение локации по IP.
Сниппет GeoLocation2 — Список активных городов.
Сниппет GeoLocation2Data — Контактные данные gl_data (вкладка «Данные»).
Если Bootstrap 5 нет в теме, у Initialize поставьте loadBootstrap => 1.
Пример вызова, модалка выбора города
На стенде вопрос модалки: «Ваш город — Москва?», кнопки «Да, верно» и «Изменить город».
Пример вызова, геолокация по IP
Ответ на стенде (оба IP): пустой блок.
Пример вызова, список городов
Поля записи города на стенде (Москва):
Пример вызова, контакты текущего города
Ответ на стенде (Москва, gl_data id=2):
Пример вызова, все записи gl_data
Ответ: строки таблицы. Фрагмент со стенда:
Управление локациями в админке
Компоненты → GeoLocation2: вкладки Страны, Регионы, Города, Данные.
На вкладке Города доступен импорт и экспорт csv.
На вкладке Данные: email, телефон, адрес, изображение. Поле class задаёт тип (GlCountry, GlRegion, GlCity), identifier: id записи.
Для сохранения нужен permission geolocation2_save.
Геолокация пользователя
Из коробки город определяется по ip через SxGeo (SxGeoCity.dat).
Стратегия задаётся настройкой geolocation2_detect_method:
База лежит в папке assets/components/geolocation2/vendor/sypexgeo/data/
Обновление: php core/components/geolocation2/bin/update-sxgeo.php
Можно повесить на cron или на задачу Scheduler geolocation2_update_sxgeo. Scheduler для работы компонента не нужен.
Примечание
Особенности
- определение города пользователя по ip
- справочник стран, регионов и городов в базе. Можно добавить и изменить нужную локацию под себя
- модалка подтверждения и смены города
- контакты, адрес и изображение в gl_data
- импорт и экспорт городов в csv
Установка
- Подключите репозиторий дополнений
- Установите GeoLocation2
- Заполните страны, регионы и города в Компоненты → GeoLocation2
Сниппет GeoLocation2Initialize — Подключает web-ассеты и конфигурацию. Вызвать в любом удобном месте.
Сниппет GeoLocation2Current — Текущее состояние города и confirmed.
Сниппет GeoLocation2Modal — UI выбора и подтверждения города.
Сниппет GeoLocation2Location — Определение локации по IP.
Сниппет GeoLocation2 — Список активных городов.
Сниппет GeoLocation2Data — Контактные данные gl_data (вкладка «Данные»).
Если Bootstrap 5 нет в теме, у Initialize поставьте loadBootstrap => 1.
Пример вызова, текущий город
{set $city = '!GeoLocation2Current'|snippet:[
'asJson' => 1
]|fromJSON}
{$city|print}
(
[gl2_current_id] => 1
[gl2_current_name_ru] => Москва
[gl2_current_name_en] => Moscow
[gl2_display_name_ru] => Москва
[gl2_real_name_ru] => Москва
[gl2_default_id] => 1
[gl2_default_name_ru] => Москва
[gl2_prompt_done] => 0
[gl2_confirmed] => 0
[gl2_csrf] =>
[gl2_unknown_label] => не определён
[gl2_default_label] => По умолчанию
)Пример вызова, модалка выбора города
{'!GeoLocation2Modal' | snippet : ['modalShow' => 1, 'modalId' => 'geolocation2Modal']}
<a href="#" class="gl2-open-modal">Открыть модалку</a>На стенде вопрос модалки: «Ваш город — Москва?», кнопки «Да, верно» и «Изменить город».
Пример вызова, геолокация по IP
{'!GeoLocation2Location' | snippet : ['ip' => '8.8.8.8']}
{'!GeoLocation2Location' | snippet : ['ip' => '1.1.1.1']}Ответ на стенде (оба IP): пустой блок.
<div class="geolocation2-location"> </div>
Пример вызова, список городов
{'!GeoLocation2' | snippet : ['limit' => 10, 'sortby' => 'name_ru', 'sortdir' => 'ASC']}Ответ (фрагмент, чанк tpl.GeoLocation2.item):
<p>
<strong>Алматы</strong>
Almaty — id региона: 9 43.23895 76.94553
</p>
<p>
<strong>Астана</strong>
Astana — id региона: 10 51.16939 71.44907
</p>Поля записи города на стенде (Москва):
( [id] => 1 [region_id] => 1 [name_ru] => Москва [name_en] => Moscow [lat] => 55.75583 [lon] => 37.61778 [okato] => 45000000000 [default] => 1 [active] => 1 )
Пример вызова, контакты текущего города
{'!GeoLocation2Data' | snippet : ['forCurrent' => 1, 'tpl' => 'tpl.GeoLocation2.data.current']}Ответ на стенде (Москва, gl_data id=2):
<div class="gl2-data-current gl2-qa-box" data-gl2-data-id="2">
<dl class="gl2-qa-kv">
<dt>Класс / ID локации</dt>
<dd>GlCity · 1 (МСК)</dd>
<dt>Email / телефон</dt>
<dd>moscow@example.ru · +7 (495) 000-00-01</dd>
<dt>Адрес</dt>
<dd>ул. Тверская, д. 1</dd>
<dt>Изображение</dt>
<dd>—</dd>
<dt>По умолчанию</dt>
<dd><span class="gl2-pill gl2-pill-ok">Да</span></dd>
<dt>Свойства</dt>
<dd class="gl2-qa-code">{"population":13010112}</dd>
</dl>
</div>Пример вызова, все записи gl_data
{'!GeoLocation2Data' | snippet : ['limit' => 0, 'sortby' => 'id', 'sortdir' => 'DESC']}Ответ: строки таблицы. Фрагмент со стенда:
<tr class="gl2-data-row" data-gl2-data-id="8" data-gl2-data-class="GlCity" data-gl2-data-identifier="9">
<td>8</td>
<td>GlCity</td>
<td>9</td>
<td>Алматы</td>
<td>1</td>
<td>almaty@example.kz</td>
<td>+7 (727) 000-00-09</td>
<td>пр. Абая, 150</td>
<td>—</td>
<td><span class="gl2-pill gl2-pill-warn">Нет</span></td>
</tr>Управление локациями в админке
Компоненты → GeoLocation2: вкладки Страны, Регионы, Города, Данные.
На вкладке Города доступен импорт и экспорт csv.
На вкладке Данные: email, телефон, адрес, изображение. Поле class задаёт тип (GlCountry, GlRegion, GlCity), identifier: id записи.
Для сохранения нужен permission geolocation2_save.
Геолокация пользователя
Из коробки город определяется по ip через SxGeo (SxGeoCity.dat).
Стратегия задаётся настройкой geolocation2_detect_method:
- sxgeo: по ip, включено по умолчанию
- session: только сессия, без обращения к SxGeo
База лежит в папке assets/components/geolocation2/vendor/sypexgeo/data/
Обновление: php core/components/geolocation2/bin/update-sxgeo.php
Можно повесить на cron или на задачу Scheduler geolocation2_update_sxgeo. Scheduler для работы компонента не нужен.
Примечание
Справочник городов вы заполняете сами. В список и поиск попадают города с флагом active. Город с флагом default подставляется, если посетитель закрыл модалку без выбора.
Нужны MODX Revolution 3.0+, PHP 8.2+, MySQL или MariaDB (InnoDB).
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[1.0.0-pl] - 2026-08-27
Added
- First public release for MODX Revolution 3.x and PHP 8.2+.
- Tables
gl_countries,gl_regions,gl_cities,gl_data(same purpose as vgrish/gl). - Manager: Countries, Regions, Cities, Data; lookup combos; permission
geolocation2_save; CSV import/export for cities. - SxGeo City UTF-8 (
SxGeoCity.dat), PHP reader based on gam6itko/sypex-geo. - Service
$modx->services->get('GeoLocation2'). - Snippets:
GeoLocation2Initialize,GeoLocation2Modal,GeoLocation2Current,GeoLocation2,GeoLocation2Location,GeoLocation2Data(withforCurrent/liveUpdate). - Bootstrap 5 city modal: confirm/change, CSRF, session
confirmed, API search (not from cached page HTML). - Web API
action.php:state,search,data,confirm,save,dismiss. - Setting
geolocation2_detect_method(sxgeo/session). - SxGeo update via CLI (
bin/update-sxgeo.php) or optional Scheduler taskgeolocation2_update_sxgeo. - Transport can ship
.dat(GL2_SKIP_SXGEO_BUNDLE,GL2_FORCE_SXGEO, localGL2_SXGEO_DAT/GL2_SXGEO_ZIP). - Docs under
docs/, including overview, install, API, and snippet pages.




Последние обсуждения в сообществе MODX.pro