
YandexMapsLocator
Единственный сниппет Free. Рисует форму поиска, список точек и карту Яндекса. HTML собирают Fenom-чанки, JS держит список и маркеры синхронно.
Pro сниппет не подменяет: те же параметры, плюс фильтры и поля из Pro.
Параметры
| Параметр | По умолчанию | Описание |
|---|---|---|
parents | (пусто) | ID родителей через запятую |
limit | 0 | Лимит (0: без ограничения) |
offset | 0 | Смещение |
radius | 0 | Радиус, км (0 → yandexmapslocator_default_radius) |
sortby | pagetitle | pagetitle, distance, menuindex, id, … |
sortdir | ASC | ASC или DESC |
tpl | yandexmapslocator.store | Чанк одной точки |
tplOuter | yandexmapslocator.outer | Обёртка |
tplSearch | yandexmapslocator.search | Форма поиска |
tplEmpty | yandexmapslocator.empty | Пустой результат |
tplError | yandexmapslocator.error | Ошибка |
includeTVs | (пусто) | Доп. TV в плейсхолдеры точки |
context | (текущий) | Context key или список через запятую |
where | (пусто) | JSON-условие для ресурсов (только сниппет). В search.php и REST запрещён |
filters | (пусто) | Имена фильтров через запятую или JSON |
category | (пусто) | Значение категории |
return | chunks | chunks, data, json |
latitude, longitude | (пусто) | Стартовые координаты для радиуса/сортировки |
address | (пусто) | Адрес для геокодирования на сервере |
productId / product_id | (пусто) | Pro: ID товара MiniShop3. Без Pro сбрасывается |
Режимы return
| Значение | Результат |
|---|---|
chunks | HTML локатора (по умолчанию) |
data | Плейсхолдеры yandexmapslocator.stores (массив) и yandexmapslocator.count |
json | JSON { success, results } без обёртки чанков |
return=json на том же сайте — не REST Pro. Нет CORS, fields и Bearer.
Фильтры
| Фильтр | Пакет | Как включить |
|---|---|---|
category | Free | filters=category + параметр category |
working_now | Pro | filters=working_now |
minishop_product | Pro | filters=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}.
Примеры
Базовый вывод
{'!YandexMapsLocator' | snippet : [
'parents' => 123,
'radius' => 50,
'sortby' => 'distance'
]}[[!YandexMapsLocator?
&parents=`123`
&radius=`50`
&sortby=`distance`
]]Поиск от адреса на сервере
Геокодирует address и сортирует точки по расстоянию (нужен yandexmapslocator_api_key).
{'!YandexMapsLocator' | snippet : [
'parents' => 123,
'address' => 'Омск, ул. Ленина, 25',
'radius' => 20,
'sortby' => 'distance',
'limit' => 15
]}[[!YandexMapsLocator?
&parents=`123`
&address=`Омск, ул. Ленина, 25`
&radius=`20`
&sortby=`distance`
&limit=`15`
]]Ближайшие от координат
{'!YandexMapsLocator' | snippet : [
'parents' => 42,
'latitude' => 55.03,
'longitude' => 82.92,
'radius' => 30,
'sortby' => 'distance',
'limit' => 20
]}[[!YandexMapsLocator?
&parents=`42`
&latitude=`55.03`
&longitude=`82.92`
&radius=`30`
&sortby=`distance`
&limit=`20`
]]Несколько контейнеров
{'!YandexMapsLocator' | snippet : [
'parents' => '120,121,122',
'sortby' => 'pagetitle'
]}[[!YandexMapsLocator? &parents=`120,121,122` &sortby=`pagetitle`]]Категория
{'!YandexMapsLocator' | snippet : [
'parents' => 42,
'category' => 'аптека',
'filters' => 'category'
]}[[!YandexMapsLocator?
&parents=`42`
&category=`аптека`
&filters=`category`
]]Режим return=data
Список точек в плейсхолдерах (свой шаблон рядом со сниппетом).
{'!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>[[!YandexMapsLocator? &parents=`42` &return=`data` &limit=`10`]]В MODX-чанке обходите плейсхолдер через Fenom или свой сниппет: массив лежит в yandexmapslocator.stores.
Режим return=json
{'!YandexMapsLocator' | snippet : [
'parents' => 42,
'return' => 'json'
]}[[!YandexMapsLocator? &parents=`42` &return=`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 запрещено.
{'!YandexMapsLocator' | snippet : [
'parents' => 42,
'where' => '{"template":5}'
]}[[!YandexMapsLocator?
&parents=`42`
&where=`{"template":5}`
]]Доп. TV в карточке
{'!YandexMapsLocator' | snippet : [
'parents' => 42,
'includeTVs' => 'metro_station,parking'
]}[[!YandexMapsLocator?
&parents=`42`
&includeTVs=`metro_station,parking`
]]В чанке: {$metro_station}, {$parking}.
Контекст
{'!YandexMapsLocator' | snippet : [
'parents' => 2080,
'context' => 'en'
]}[[!YandexMapsLocator? &parents=`2080` &context=`en`]]Только открытые сейчас (Pro)
Задайте yandexmapslocator_timezone под сеть. Иначе «сейчас» считается в Europe/Moscow (или TZ PHP, если настройка пустая).
{'!YandexMapsLocator' | snippet : [
'parents' => 42,
'filters' => 'working_now'
]}[[!YandexMapsLocator? &parents=`42` &filters=`working_now`]]Категория + открытые (Pro)
{'!YandexMapsLocator' | snippet : [
'parents' => 42,
'category' => 'аптека',
'filters' => 'category,working_now'
]}[[!YandexMapsLocator?
&parents=`42`
&category=`аптека`
&filters=`category,working_now`
]]Карточка товара MiniShop3 (Pro)
{'!YandexMapsLocator' | snippet : [
'parents' => $storesParent,
'productId' => $_modx->resource.id,
'filters' => 'minishop_product'
]}[[!YandexMapsLocator?
&parents=`[[++yml_stores_parent]]`
&productId=`[[*id]]`
&filters=`minishop_product`
]]Самовывоз + только открытые (Pro)
{'!YandexMapsLocator' | snippet : [
'parents' => $storesParent,
'productId' => $_modx->resource.id,
'filters' => 'minishop_product,working_now',
'sortby' => 'distance'
]}[[!YandexMapsLocator?
&parents=`[[++yml_stores_parent]]`
&productId=`[[*id]]`
&filters=`minishop_product,working_now`
&sortby=`distance`
]]Свой чанк с бейджем Pro
В tpl (фрагмент):
{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, Интерфейс.
