Подключаем к Tickets Яндекс карты при помощи Mapex

Данное решение позволяет привязать к Tickets Яндекс карты.

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]]`
]]
Александр Наумов
23 февраля 2014, 08:12
modx.pro
1
4 026
+3

Комментарии: 7

Николай
04 марта 2014, 14:10
0
Не понятно почему такое различие карты при редактировании в админке и при создании Тикета. Ни поиска, ни меток, ни остальных плюшек Mapex. Это связано с особенностями фильтрации тикета при сохранении?
ps поиск добавляется
myMap.controls.add('searchControl');
а вот с метками не понятно как выводить кнопку)
    Александр Наумов
    04 марта 2014, 15:42
    0
    Нужно изучать API Яндекс карт, можешь посмотреть на этот сайт webmap-blog.ru/category/yandex-maps там много различных примеров.
      Николай
      04 марта 2014, 16:13
      0
      То есть надо заново изобретать то, что уже сделано в mapex2? Странно как-то.
        Александр Наумов
        04 марта 2014, 21:14
        0
        У mapex видимо как-то иначе карта формируется раз некоторые кнопки не добавляются — надо разбираться. Мне нужно было передавать только координаты, вот под эту задачу я и собирал карту.
    Rrp2010
    22 апреля 2016, 22:43
    0
    При сохранении, в TV [[*mapex]] передаются только координаты карты, в таком виде (44.0146,39.1691), без параметров «zoom», «placemarks».

    Плагин на событие OnDocFormSave, похоже на то, что он не срабатывает. Использую в Formit.

    Подскажите, в чем может быть проблема? Спасибо!
      Александр Наумов
      22 апреля 2016, 22:55
      +1
      Используйте YandexMaps, данная статья уже не актуальна.
        Rrp2010
        22 апреля 2016, 23:19
        0
        Спасибо за компонент и что направили в правильное русло )) А вообще mapex полностью устраивал, кроме этого нюанса.

      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      7