Подключаем к Tickets Яндекс карты при помощи Mapex
Данное решение позволяет привязать к Tickets Яндекс карты.
1. Устанавливаем Mapex2 по инструкции
2. Правим чанк tpl.Tickets.form.create в форму добавляем:
3. Пишим плагин на событие OnDocFormSave:
4. Для создания тикета с картами:
5. Для вывода тикета с картами:
1. Устанавливаем Mapex2 по инструкции
2. Правим чанк tpl.Tickets.form.create в форму добавляем:
<div class="form-group">
<script src="//api-maps.yandex.ru/2.0/?load=package.standard&lang=ru-RU" type="text/javascript"></script>
<input name="mapex" id="mapex" value="" type="hidden">
<input name="map_type" id="map_type" value="yandex#map" type="hidden">
<label>Кликните по карте, чтобы выбрать место.</label>
<div id="mapY" style="width:600px; height:400px"></div>
<script type="text/javascript">
ymaps.ready(init);
var myMap;
function init () {
var geolocation = ymaps.geolocation,
coords = [geolocation.latitude, geolocation.longitude],
myMap = new ymaps.Map('mapY', {
center: coords,
zoom: 10
}, {
balloonMaxWidth: 200
});
// Добавление стандартного набора кнопок
myMap.controls
.add("mapTools")
.add("zoomControl")
.add("typeSelector");
myMap.controls
.add(new ymaps.control.ScaleLine())
.add(new ymaps.control.MiniMap({
type: document.getElementById("map_type").value
}));
// Обработка события, возникающего при щелчке
// левой кнопкой мыши в любой точке карты.
// При возникновении такого события откроем балун.
myMap.events.add('click', function (e) {
if (!myMap.balloon.isOpen()) {
var coords = e.get('coordPosition');
myMap.balloon.open(coords, {
contentHeader:'Место выбранно!',
contentBody:'<p>Координаты: ' + [
coords[0].toPrecision(6),
coords[1].toPrecision(6)
].join(', ') + '</p>',
contentFooter:'<sup>Кликните в другом месте, чтобы сменить координаты</sup>'
});
document.getElementById('mapex').value = [coords[0].toPrecision(6),coords[1].toPrecision(6)];
}
else {
myMap.balloon.close();
}
});
var coords = e.get('target').geometry.getCoordinates();// Читаем координаты
document.getElementById("mapex").value = coords;// Сохраняем координаты
}
</script>
</div>
3. Пишим плагин на событие OnDocFormSave:
<?php
if ($modx->event->name == 'OnDocFormSave')
{
$resource=$modx->getObject('modResource', $id);
$tv = $resource->getTVValue('mapex');
$output = '{"coords":{"center":['.$tv.'],"zoom":11},"type":"yandex#map","placemarks":[{"coords":['.$tv.'],"params":{"color":"blue","iconContent":"","balloonContentBody":"","balloonContentHeader":""]}},"polygons":[],"lines":[],"routes":[]}';
$resource->setTVValue('mapex', $output);
$resource->save();
}
4. Для создания тикета с картами:
[[!TicketForm?
&allowedFields=`mapex,text,published`
&requiredFields=`mapex`
]]
5. Для вывода тикета с картами:
[[!mapexDrawMap?
&controls=`mapTools,zoomControl,typeSelector`
&map=`[[*mapex]]`
]]
Комментарии: 7
Не понятно почему такое различие карты при редактировании в админке и при создании Тикета. Ни поиска, ни меток, ни остальных плюшек Mapex. Это связано с особенностями фильтрации тикета при сохранении?
ps поиск добавляется
ps поиск добавляется
myMap.controls.add('searchControl');
а вот с метками не понятно как выводить кнопку)
Нужно изучать API Яндекс карт, можешь посмотреть на этот сайт webmap-blog.ru/category/yandex-maps там много различных примеров.
То есть надо заново изобретать то, что уже сделано в mapex2? Странно как-то.
У mapex видимо как-то иначе карта формируется раз некоторые кнопки не добавляются — надо разбираться. Мне нужно было передавать только координаты, вот под эту задачу я и собирал карту.
При сохранении, в TV [[*mapex]] передаются только координаты карты, в таком виде (44.0146,39.1691), без параметров «zoom», «placemarks».
Плагин на событие OnDocFormSave, похоже на то, что он не срабатывает. Использую в Formit.
Подскажите, в чем может быть проблема? Спасибо!
Плагин на событие OnDocFormSave, похоже на то, что он не срабатывает. Использую в Formit.
Подскажите, в чем может быть проблема? Спасибо!
Используйте YandexMaps, данная статья уже не актуальна.
Спасибо за компонент и что направили в правильное русло )) А вообще mapex полностью устраивал, кроме этого нюанса.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.