Skip to content
YandexMapsLocator
YandexMapsLocator
Локатор точек на Яндекс.Картах для MODX 3. Free: карта и поиск. Pro: «открыто сейчас», MiniShop3, CSV и REST
  1. Компоненты
  2. YandexMapsLocator
  3. Интеграция на сайте
  4. Сниппет YandexMapsLocator

YandexMapsLocator

Единственный сниппет Free. Рисует форму поиска, список точек и карту Яндекса. HTML собирают Fenom-чанки, JS держит список и маркеры синхронно.

Pro сниппет не подменяет: те же параметры, плюс фильтры и поля из Pro.

Параметры

ПараметрПо умолчаниюОписание
parents(пусто)ID родителей через запятую
limit0Лимит (0: без ограничения)
offset0Смещение
radius0Радиус, км (0 → yandexmapslocator_default_radius)
sortbypagetitlepagetitle, distance, menuindex, id, …
sortdirASCASC или DESC
tplyandexmapslocator.storeЧанк одной точки
tplOuteryandexmapslocator.outerОбёртка
tplSearchyandexmapslocator.searchФорма поиска
tplEmptyyandexmapslocator.emptyПустой результат
tplErroryandexmapslocator.errorОшибка
includeTVs(пусто)Доп. TV в плейсхолдеры точки
context(текущий)Context key или список через запятую
where(пусто)JSON-условие для ресурсов (только сниппет). В search.php и REST запрещён
filters(пусто)Имена фильтров через запятую или JSON
category(пусто)Значение категории
returnchunkschunks, data, json
latitude, longitude(пусто)Стартовые координаты для радиуса/сортировки
address(пусто)Адрес для геокодирования на сервере
productId / product_id(пусто)Pro: ID товара MiniShop3. Без Pro сбрасывается

Режимы return

ЗначениеРезультат
chunksHTML локатора (по умолчанию)
dataПлейсхолдеры yandexmapslocator.stores (массив) и yandexmapslocator.count
jsonJSON { success, results } без обёртки чанков

return=json на том же сайте — не REST Pro. Нет CORS, fields и Bearer.

Фильтры

ФильтрПакетКак включить
categoryFreefilters=category + параметр category
working_nowProfilters=working_now
minishop_productProfilters=minishop_product + productId

Плейсхолдеры чанка точки (tpl)

ПеременнаяОписание
{$id}ID ресурса
{$pagetitle}, {$longtitle}, {$description}Поля ресурса
{$url}Ссылка на ресурс
{$address}Адрес
{$latitude}, {$longitude}Координаты
{$phone}, {$email}, {$working_hours}Контакты
{$working_hours_formatted}, {$working_hours_compact}Расписание (plain text)
{$working_hours_compact_html}Компактное HTML (| raw в Fenom)
{$is_open_now}Pro: открыто ли сейчас
{$category}Категория
{$balloon_image}, {$marker_icon}Медиа
{$distance_formatted}Расстояние (если задан центр поиска)
{$idx}Порядковый номер

Иконка маршрута в default-чанке: {$_modx->config['assets_url']}components/yandexmapslocator/img/yandex-navigator.svg.

Lexicon: {'yandexmapslocator_route' | lexicon}.

Примеры

Базовый вывод

fenom
{'!YandexMapsLocator' | snippet : [
    'parents' => 123,
    'radius' => 50,
    'sortby' => 'distance'
]}
modx
[[!YandexMapsLocator?
    &parents=`123`
    &radius=`50`
    &sortby=`distance`
]]

Поиск от адреса на сервере

Геокодирует address и сортирует точки по расстоянию (нужен yandexmapslocator_api_key).

fenom
{'!YandexMapsLocator' | snippet : [
    'parents' => 123,
    'address' => 'Омск, ул. Ленина, 25',
    'radius' => 20,
    'sortby' => 'distance',
    'limit' => 15
]}
modx
[[!YandexMapsLocator?
    &parents=`123`
    &address=`Омск, ул. Ленина, 25`
    &radius=`20`
    &sortby=`distance`
    &limit=`15`
]]

Ближайшие от координат

fenom
{'!YandexMapsLocator' | snippet : [
    'parents' => 42,
    'latitude' => 55.03,
    'longitude' => 82.92,
    'radius' => 30,
    'sortby' => 'distance',
    'limit' => 20
]}
modx
[[!YandexMapsLocator?
    &parents=`42`
    &latitude=`55.03`
    &longitude=`82.92`
    &radius=`30`
    &sortby=`distance`
    &limit=`20`
]]

Несколько контейнеров

fenom
{'!YandexMapsLocator' | snippet : [
    'parents' => '120,121,122',
    'sortby' => 'pagetitle'
]}
modx
[[!YandexMapsLocator? &parents=`120,121,122` &sortby=`pagetitle`]]

Категория

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

Режим return=data

Список точек в плейсхолдерах (свой шаблон рядом со сниппетом).

fenom
{'!YandexMapsLocator' | snippet : [
    'parents' => 42,
    'return' => 'data',
    'limit' => 10
]}
{foreach $yandexmapslocator.stores as $store}
    <li><a href="{$store.url}">{$store.pagetitle}</a> {$store.address}</li>
{/foreach}
<p>Всего: {$yandexmapslocator.count}</p>
modx
[[!YandexMapsLocator? &parents=`42` &return=`data` &limit=`10`]]

В MODX-чанке обходите плейсхолдер через Fenom или свой сниппет: массив лежит в yandexmapslocator.stores.

Режим return=json

fenom
{'!YandexMapsLocator' | snippet : [
    'parents' => 42,
    'return' => 'json'
]}
modx
[[!YandexMapsLocator? &parents=`42` &return=`json`]]

Фрагмент ответа:

json
{
  "success": true,
  "results": [
    {
      "id": 15,
      "pagetitle": "Магазин на Ленина",
      "address": "ул. Ленина, 25",
      "latitude": 54.98,
      "longitude": 73.36
    }
  ]
}

Для CORS и headless используйте REST Pro, не этот режим.

where (только сниппет)

JSON-условие xPDO. В search.php и REST запрещено.

fenom
{'!YandexMapsLocator' | snippet : [
    'parents' => 42,
    'where' => '{"template":5}'
]}
modx
[[!YandexMapsLocator?
    &parents=`42`
    &where=`{"template":5}`
]]

Доп. TV в карточке

fenom
{'!YandexMapsLocator' | snippet : [
    'parents' => 42,
    'includeTVs' => 'metro_station,parking'
]}
modx
[[!YandexMapsLocator?
    &parents=`42`
    &includeTVs=`metro_station,parking`
]]

В чанке: {$metro_station}, {$parking}.

Контекст

fenom
{'!YandexMapsLocator' | snippet : [
    'parents' => 2080,
    'context' => 'en'
]}
modx
[[!YandexMapsLocator? &parents=`2080` &context=`en`]]

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

Задайте yandexmapslocator_timezone под сеть. Иначе «сейчас» считается в Europe/Moscow (или TZ PHP, если настройка пустая).

fenom
{'!YandexMapsLocator' | snippet : [
    'parents' => 42,
    'filters' => 'working_now'
]}
modx
[[!YandexMapsLocator? &parents=`42` &filters=`working_now`]]

Категория + открытые (Pro)

fenom
{'!YandexMapsLocator' | snippet : [
    'parents' => 42,
    'category' => 'аптека',
    'filters' => 'category,working_now'
]}
modx
[[!YandexMapsLocator?
    &parents=`42`
    &category=`аптека`
    &filters=`category,working_now`
]]

Карточка товара MiniShop3 (Pro)

fenom
{'!YandexMapsLocator' | snippet : [
    'parents' => $storesParent,
    'productId' => $_modx->resource.id,
    'filters' => 'minishop_product'
]}
modx
[[!YandexMapsLocator?
    &parents=`[[++yml_stores_parent]]`
    &productId=`[[*id]]`
    &filters=`minishop_product`
]]

Самовывоз + только открытые (Pro)

fenom
{'!YandexMapsLocator' | snippet : [
    'parents' => $storesParent,
    'productId' => $_modx->resource.id,
    'filters' => 'minishop_product,working_now',
    'sortby' => 'distance'
]}
modx
[[!YandexMapsLocator?
    &parents=`[[++yml_stores_parent]]`
    &productId=`[[*id]]`
    &filters=`minishop_product,working_now`
    &sortby=`distance`
]]

Свой чанк с бейджем Pro

В tpl (фрагмент):

fenom
{if isset($is_open_now)}
    <span class="yml-store__status {if $is_open_now}is-open{else}is-closed{/if}">
        {if $is_open_now}
            {'yandexmapslocator_open_now' | lexicon}
        {else}
            {'yandexmapslocator_closed_now' | lexicon}
        {/if}
    </span>
{/if}
{if $working_hours_compact_html?}
    <p class="yml-store__hours">{$working_hours_compact_html | raw}</p>
{/if}

См. Открыто сейчас, MiniShop3, Интерфейс.