YandexMapsLocator

Локатор точек на Яндекс.Картах: карта, список, поиск
Версия 1.0.0-pl
Дата выпуска 31.08.2026
Загрузки 0
Просмотры 5
Внимание, этот компонент требует PHP 8.2 или выше!
Внимание, этот компонент требует MODX 3 или выше.
Локатор точек сети на Яндекс.Картах для MODX Revolution 3. На странице: карта с маркерами, список точек, поиск по адресу и кнопка «Моё местоположение». Одна точка = один опубликованный ресурс с TV (адрес, координаты, телефон, часы).

Кому подойдёт: сайт сети магазинов, пунктов выдачи или филиалов на MODX 3, где нужна карта на витрине без отдельной БД магазинов.

Назначение
  • карта Яндекса со списком точек рядом (на телефоне — табы «Список» / «Карта»);
  • поиск по адресу и сортировка по расстоянию;
  • геолокация браузера и сброс фильтра («Все точки»);
  • маршрут в Яндекс Навигатор с карточки и из балуна;
  • категории, свои иконки маркеров и картинки в балуне.

Как это работает


  1. Создаёте контейнер и дочерние ресурсы-точки, заполняете TV адреса и координат.
  2. В форме ресурса можно нажать кнопку геокода (нужен API-ключ Яндекса).
  3. На странице вызываете сниппет YandexMapsLocator с parents = ID контейнера.
  4. JS синхронизирует список и маркеры.

Возможности Free
  1. Локатор. Сниппет YandexMapsLocator: форма, список, карта. Параметры parents, limit, radius, sortby, category, filters, context, return.
  2. Режимы вывода. chunks (HTML), data (плейсхолдеры), json для своего шаблона на том же origin.
  3. Геолокация и поиск. «Моё местоположение», поиск по адресу через HTTP Геокодер Яндекса, радиус и сортировка по distance.
  4. Карточка и балун. Адрес, телефон, часы, маршрут, balloon image, custom marker icon.
  5. TV и геокод в mgr. Набор TV ставится при установке. Имена задаёте через yandexmapslocator_tv_*.
  6. UI. Mobile-first, BEM yml-*, атрибуты data-yml-*, CSS-переменные на .yml-locator.
  7. Multi-context. Параметр context, настройки default_context и allowed_contexts.
  8. Extension API. События для фильтров и feature providers. Pro и свои extras подключаются без правок ядра Free.



Free и Pro

Этот пакет — Free: локатор на сайте (карта, список, поиск, геолокация, категории, Extension API). Точки — ресурсы MODX с TV. Для витрины сети этого обычно достаточно.

YandexMapsLocatorPro — отдельный платный пакет. Ставится поверх Free (без Free не установится). Тот же UI локатора, плюс операции и интеграции:

  • REST API v1api.php?route=api/v1/locations (список, деталь, geocode). CORS, Bearer (api_token), whitelist fields/include, kill switch api_enabled. Нужен для headless (Nuxt/Next) с другого origin. См. Pro API.
  • «Открыто сейчас» — фильтр working_now, поля is_open_now / working_hours_schedule, бейджи «Открыто» / «Закрыто», кнопка «Только открытые». Таймзона сети: Free-настройка yandexmapslocator_timezone (IANA, например Asia/Omsk). В TV часов для фильтра нужен JSON. Подробнее: открыто сейчас.
  • CSV в CMP — Компоненты → YandexMapsLocator Pro: импорт и экспорт по ID контейнера (адрес, координаты, контакты, часы). Менеджер Pro.
  • MiniShop3 — на карточке товара карта только с точками, где товар доступен: TV ms3_product_id на точке + параметр productId и фильтр minishop_product. MiniShop3.

Чего нет в Free вместо REST. Режим return=json и endpoint search.php работают только same-origin: нет CORS для чужого домена, нет выбора полей fields/include, нет Bearer. Публичный read API для SPA на другом хосте — только Pro.

Пустой api_token на стенде открывает REST без токена. На production задайте Bearer.

Если Pro установлен, а api_enabled выключен, REST отвечает 503, а локатор на странице остаётся на search.php.

Полная матрица: docs.modx.pro — Free и Pro.

Пример вызова

{'!YandexMapsLocator' | snippet : [
    'parents' => 123,
    'radius' => 50,
    'sortby' => 'distance'
]}

Фильтр по категории

{'!YandexMapsLocator' | snippet : [
    'parents' => 42,
    'category' => 'аптека',
    'filters' => 'category'
]}

Только открытые сейчас (Pro)

{'!YandexMapsLocator' | snippet : [
    'parents' => 42,
    'filters' => 'working_now'
]}

Задайте yandexmapslocator_timezone (IANA). Для фильтра в TV часов нужен JSON. Текст без JSON показывается в карточке, но «открыто» для него не считается.

TV по умолчанию

Ставятся при установке пакета. Имена можно сменить через настройки yandexmapslocator_tv_*.

  • yandexmaps_address — адрес точки (поиск, балун, карточка). По нему же работает кнопка геокода в mgr.
  • yandexmaps_latitude / yandexmaps_longitude — координаты маркера на карте и сортировки по distance.
  • yandexmaps_phone — телефон в карточке и балуне (ссылка tel:).
  • yandexmaps_email — email точки (в данных Store / REST при запросе поля).
  • yandexmaps_working_hours — часы работы: текст для показа или JSON для Pro-фильтра «открыто сейчас» и бейджей.
  • yandexmaps_category — категория точки. Фильтр сниппета: filters=category + параметр category.
  • yandexmaps_balloon_image — картинка в popup балуна на карте (если пусто — fallback из настройки default_balloon_image).
  • yandexmaps_marker_icon — своя иконка маркера вместо стандартной. Размер: yandexmapslocator_marker_icon_size (например 32,32).

Скриншоты









Четыре шага


  1. Установите пакет через Управление пакетами. См. быстрый старт.
  2. Укажите yandexmapslocator_api_key (JS API и HTTP Геокодер в кабинете Яндекса). Список ключей: настройки.
  3. Создайте контейнер и дочерние точки, заполните TV.
  4. Вызовите сниппет на странице (нужен pdoTools). Параметры: сниппет YandexMapsLocator.

Changelog — YandexMapsLocator

Формат: Keep a Changelog Версии: Semantic Versioning

[1.0.0] - 2026-08-31

Первый публичный релиз YandexMapsLocator (Free) для MODX Revolution 3. Локатор точек на Яндекс.Картах: одна точка = один ресурс с TV.

Платное расширение YandexMapsLocatorPro (REST, working_now, CSV, MiniShop3) ставится отдельно поверх Free. Матрица: docs/free-vs-pro.md.

Added

Локатор на сайте

  • Сниппет YandexMapsLocator: список, карта, поиск по адресу, геолокация («Моё местоположение» / «Все точки»), сортировка по расстоянию, фильтр category.
  • AJAX search.php (same-origin). Режимы return=chunks / data / json.
  • Chunks на Fenom (pdoTools): outer, search, store, empty, error. Разметка BEM (yml-*), контракт data-yml-*.
  • Кнопка маршрута в Яндекс Навигатор, кастомные иконки маркеров и картинки балуна (TV + settings).

Точки и TV

  • TV по умолчанию: адрес, координаты, телефон, email, часы работы, категория, balloon image, marker icon.
  • Имена TV переопределяются через yandexmapslocator_tv_*.
  • Кнопка геокода адреса в форме ресурса (mgr).

Карта и настройки

  • API-ключ Яндекс.Карт (yandexmapslocator_api_key) для JS API и HTTP Геокодера.
  • Центр, zoom, кластеризация, радиус, единица расстояния, fallback-картинка балуна, размер иконки маркера.
  • Multi-context: context / ctx, yandexmapslocator_default_context, yandexmapslocator_allowed_contexts.
  • yandexmapslocator_timezone (IANA, по умолчанию Europe/Moscow) для Pro working_now / бейджей «Открыто».

Extension API

  • События регистрации фильтров и feature providers, хуки prepare Store и search.
  • Хуки сериализации для REST Pro.
  • Frontend modules из capability pro (подключение pro.js).

Интерфейс

  • Mobile-first: табы «Список» / «Карта», desktop — две колонки.
  • CSS-токены на .yml-locator, кэш-бастинг ассетов (?v=).
  • Карточка: блок meta (статус Pro + часы), дни в .yml-store__hours-day через working_hours_compact_html.
  • JavaScript API: search(), locate(), события store:click, marker:click, balloon:build.

Документация и качество

  • docs/: установка, сниппет, UI, contexts, Extension API, события, Free vs Pro, REST (для Pro).
  • Pest / PHPStan / CI.

Fixed

  • Чанк store.tpl: вместо несуществующих в Fenom | default и | raw?: и {raw …} (pdoTools больше не ищет сниппеты default / raw).
  • map_config.restApi: учитывает api_enabled. При выключенном REST локатор ходит в search.php.
  • Search.js: context передаётся из опций, без обращения к несуществующему this.config.

Requirements

  • PHP 8.2+
  • MODX Revolution 3.x
  • MySQL / MariaDB
  • pdoTools (Fenom-чанки)
  • API-ключ Яндекс.Карт (JS API и HTTP Геокодер)

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