Компонент автоматически определяет координаты пользователя по API браузера и если координаты не определены то получает координаты из сервиса DaData
Поиск адреса с помощью Yandex карты
Для быстрого старта нужно установить компонент и выполнить 3 шага
С помощью инструкции получить токен
Зайти в системные настройки modx, выбрать namespace locatemap и в настройке с ключем locatemap_token_dadata указать токен из личного кабинета
В любом месте сайт вызовите сниппет для запуска модельного окна
[[!LocateMap]]
<!--Выведет-->
<ul class="navbar-nav mr-auto ">
<li class="nav-item dropdown">
<a class="dropdown-item locatemap_my_address locatemapBtnModal " href="#">
<svg width="11" height="15" viewBox="0 0 11 15" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M5.20525 0C2.33504 0 0 2.33538 0 5.20567C0 7.96856 4.72282 14.4237 4.92391 14.697L5.11159 14.9524C5.13353 14.9824 5.16848 15 5.20525 15C5.24259 15 5.27731 14.9824 5.29949 14.9524L5.48705 14.697C5.68826 14.4237 10.411 7.96856 10.411 5.20567C10.411 2.33538 8.07554 0 5.20525 0ZM5.20525 3.34101C6.23366 3.34101 7.06991 4.1773 7.06991 5.20567C7.06991 6.2335 6.23362 7.07033 5.20525 7.07033C4.17745 7.07033 3.34059 6.2335 3.34059 5.20567C3.34059 4.1773 4.17742 3.34101 5.20525 3.34101Z"
fill="white"/>
</svg>
<span class="locatemap_my_address_text" title="{$name}">{if $known}{$name}{else}Укажите адрес доставки{/if}</span>
</a>
</li>
</ul>
Или можно использовать класс для запуска
<button class="locatemapBtnModal">Показать карту</button>
Обязательно нужно получить токен
Токен для DaData имеет ограничения в 10 000 запросов в сутки.
Получить токен можно в личном кабинете
Получение токена для Yandex необязательно
Токен нужен для использования геокодера яндекс он лучше всех из 3-х кодеров определят точность адреса! Но при этом имеет ограничения в 1000 запросов в сутки.
Для получения зайдите в личный кабинет yandex и с помощью инструкции получить токен.
Компоненте имеет по умолчанию 3 геокодера
С помощтю полученных гео координат с запросом в геокодер будут возвращать данные:
По умолчанию в систему добавлено два плагина
Основной плагин для регистрации скриптов
Плагин записывает адрес после сохранения и срабатывает на LocateMapAfterSaveAddress.
Логику работы можно посмотреть на событии LocateMapAfterSaveAddress
И после каждого отправления заказа заново вводит адрес в сессию срабатывая на событие minishop2 отчистка заказа msOnEmptyOrder
Компонент поставляется только с одном сниппетом для вывода чанка
[[!LocateMap]]
{'LocateMap'|snippet : [
'tpl' => 'tpl.LocateMap.Outer'
]}
tpl.LocateMap.Outer - выводит кнопку для запуска модельного окна с картой
<ul class="navbar-nav mr-auto ">
<li class="nav-item dropdown">
<a class="dropdown-item locatemap_my_address locatemapBtnModal " href="#">
<svg width="11" height="15" viewBox="0 0 11 15" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M5.20525 0C2.33504 0 0 2.33538 0 5.20567C0 7.96856 4.72282 14.4237 4.92391 14.697L5.11159 14.9524C5.13353 14.9824 5.16848 15 5.20525 15C5.24259 15 5.27731 14.9824 5.29949 14.9524L5.48705 14.697C5.68826 14.4237 10.411 7.96856 10.411 5.20567C10.411 2.33538 8.07554 0 5.20525 0ZM5.20525 3.34101C6.23366 3.34101 7.06991 4.1773 7.06991 5.20567C7.06991 6.2335 6.23362 7.07033 5.20525 7.07033C4.17745 7.07033 3.34059 6.2335 3.34059 5.20567C3.34059 4.1773 4.17742 3.34101 5.20525 3.34101Z"
fill="white"/>
</svg>
<span class="locatemap_my_address_text" title="{$name}">{if $known}{$name}{else}Укажите адрес доставки{/if}</span>
</a>
</li>
</ul>
Есть несколько модификаторов которые выводят из сессии данные
{var $address = ''|locatemapToArray}
<!--
$address = [
[known] => 1
[description] => село Кушалино, Рамешковский муниципальный округ, Тверская область, Россия
[name] => Строительная улица, 8
[house] => 8
[street] => Строительная улица
[block] =>
[lat] => 57.12947125024
[lon] => 36.083227174439
[postal_code] =>
[city] => село Кушалино
[region] => Тверская область
[area] =>
[country_code] => ru
[kind] => house
]
-->
Возвращает отдельные поля
{var $name = 'name' | locatemap}
<!--
$name =""Строительная улица, 8
-->
После некоторый действий срабатывают js события
После некоторый действий срабатывают js события
Срабатывает после получения адреса из геокодер
Срабатывает после сохранения адреса
После закрытия модельного окна
После закрытия модельного окна
// пример подписки на js события
$(document).on('locatemap_save_address', function (e, res) {
if (res.success) {
console.log(res.data) // тут будет адрес пользователя который сохранили в сессии
}
})
События работают через плагины modx и на них можно подписываться
Событие срабатывает перед сохранением адреса
<?php
// Event:LocateMapBeforeSaveAddress
// Комментарий: Заполняем форму для заказа miniShop2
/** @var modX $modx */
/* @var array $scriptProperties */
/* @var \LocateMap\Address $address */
// Получаем улицу
$street = $address->street()
// и записываем новое название
$address->setName('Тут новое название '.$street)
После сохранения адрес можно записать наш новый адрес в заказ minishop
<?php
// Event:LocateMapAfterSaveAddress
// Комментарий: Заполняем форму для заказа miniShop2
/** @var modX $modx */
/* @var array $scriptProperties */
/* @var \LocateMap\Address $address */
/* @var miniShop2 $miniShop2 */
$miniShop2 = $modx->getService('miniShop2');
if ($miniShop2->loadServices()) {
if ($index = $address->get('postal_code')) {
$miniShop2->order->add('index', $index);
}
if ($region = $address->get('region')) {
$miniShop2->order->add('region', $region);
}
if ($city = $address->get('city')) {
$miniShop2->order->add('city', $city);
}
if ($house = $address->get('house')) {
$miniShop2->order->add('building', $house);
}
if ($street = $address->get('street')) {
$miniShop2->order->add('street', $street);
}
}
Срабатывает перед получением адреса
/* @var string $service Гео кодер через который будет производиться поиск адреса*/
/* @var string $lat широта */
/* @var string $lon долгота */
// Подменить геокодр по умолчанию на новый
// В системе доступны 3 кодера Nominatim DaData Yandex
$this->modx->event->returnedValues['service'] = 'Yandex';
Срабатывает после получением адреса
/* @var LocateMap\Address $address */
// Получаем улицу
$street = $address->street()
// и записываем новое название
$address->setName('Тут новое название '.$street)
// Пользователю вернется новое название, котором затем можно сохранить в сессию
Цена 4500 руб.
Продажа и поддержка компонента осуществляется через маркетплейс modstore.pro
Перейти на маркетплейс >>>