photo

Карты в топиках/статьях

Последнее обновление: 8 мая 2015

Совместимость: AltoCMS 1.0.+

Версия: 1.1.5

Скачан: 1913 раз

Скачать

Добавил: aVadim

вставить в блог

Описание

Позволяет добавлять карту с меткой к статьям в Alto CMS

Доступны Google/Яндекс карты на выбор (в конфиге).

Этот плагин является адаптацией плагина altocms.ru/addons/item/48/ для Alto CMS 1.0 и выше.

Установка
1) Устанавливаем плагин стандартным способом
2) В администраторской панели переходим в меню «типы контента»
3) Нажимаем «редактировать» напротив типа контента, к которому будет присоединено поле карт
4) Нажмаем «добавить поле». Выбираем в выпадающем списке «Карта», прописываем название поля, например «Место встречи», и пояснение-подсказку к нему «Отметьте место встречи на карте»
5) Сохраняем поле. При необходимости обычным перетаскиванием можно изменить порядок поля среди остальных полей на необходимый вам
6) В конфиге плагина /maps/config/config.php можно выбрать какой тип карт использовать — Яндекс или Google

Отключение плагина
ВАЖНО! ДО отключения плагина, нужно отредактировать типы контента, куда добавлено поле «Карта», удалив его. И только ПОСЛЕ этого можно отключать сам плагин.

8 комментариев

0
это для какой версии? для 1.1 (новой) подходит?
0
Проверил на последней бете с Гитхаба.
Работает, но, не меняется на гугл.
0
Сейчас на последней 1.1.8 с гита вообще перестал работать:( Т.е. новый тип топика публикуется, но карта потом в нем не отображается.
0
Здравствуйте. А как вывести все метки на одной карте?
0
«из коробки» установился, но на френде не завелся.
1. Для Google нужен ключ «Для всех приложений Google Maps JavaScript API требуется аутентификация.» — получаем тут «https://developers.google.com/maps/documentation/javascript/get-api-key»
2. в файлах Yandex ошибка, а точнее по адресу: /common/plugins/maps/templates/skin/default/fields/customs/maps/yandex/ -есть два файла show.tpl и edit.tpl
Первая ошибка — путь скрипта должен быть:
<script src="https://api-maps.yandex.ru/2.0/?load=package.full&mode=release&lang=ru-RU" type="text/javascript"></script>


далее в show.tpl меняем ymap на myMap, т.е. строки 8, 18, 32, 46 и 50

аналогично и с edit.tpl. Код выложить не получается — бот ругается на комментарий.
0
show.tpl
<p>
    <b>{$sMapLabel}</b>:
    <div>
    <script src="https://api-maps.yandex.ru/2.0/?load=package.full&mode=release&lang=ru-RU" type="text/javascript"></script>

    <script type="text/javascript">
        ymaps.ready(function () {
			var myMap = new ymaps.Map("ItemMap", {
				// Центр карты
				center: {json var=$aMapDefaultCenter},
				// Коэффициент масштабирования
				zoom: {Config::Get('plugin.maps.map_zoom')},
				// Тип карты
				type: "yandex#map"
			});
            var myPlacemark;

			myMap.controls.add("typeSelector").add("zoomControl");

            {$aBounds=array()}
            {foreach $aMapPlaces as $iIndex => $aPlace}
            // begin -- #{$iIndex}
            myPlacemark = new ymaps.Placemark({json var=$aPlace.coord}, {
                balloonContentHeader: "{$aPlace.title}",
                balloonContentBody: ''
            }, {
                // Опции
                preset: 'twirl#blueStretchyIcon' // иконка растягивается под контент
            });

            // Добавляем метку на карту
            myMap.geoObjects.add(myPlacemark);
            myPlacemark.balloon.open();
            // end -- #{$iIndex}
            {if $aPlace@first}
            {$aBounds=array($aPlace.coord, $aPlace.coord)}
            {else}
            {if $aBounds.0.0>$aPlace.coord.0}{$aBounds.0.0=$aPlace.coord.0-0.002}{/if}
            {if $aBounds.0.1>$aPlace.coord.1}{$aBounds.0.1=$aPlace.coord.1-0.002}{/if}
            {if $aBounds.1.0<$aPlace.coord.0}{$aBounds.1.0=$aPlace.coord.0+0.002}{/if}
            {if $aBounds.1.1<$aPlace.coord.1}{$aBounds.1.1=$aPlace.coord.1+0.002}{/if}
            {/if}
            {/foreach}

            {if sizeof($aMapPlaces) > 1}
            myMap.setBounds({json var=$aBounds}, {
                checkZoomRange: true
            });
            {else}
            myMap.setCenter({json var=$aPlace.coord});
            {/if}
		});

	</script>

	<div id="ItemMap" style="width:{Config::Get('plugin.maps.map_width')};height:{Config::Get('plugin.maps.map_height')};"></div>

	</div>
</p>
0
edit.tpl
<p>
    {assign var=field_id value=$oField->getFieldId()}
    <label for="item_map">{$oField->getFieldName()}:</label>
    <div id="map">
        <script src="https://api-maps.yandex.ru/2.0/?load=package.full&mode=release&lang=ru-RU" type="text/javascript"></script>

        <script type="text/javascript">
            ymaps.ready(function () {
                var myMap = new ymaps.Map("ItemMap", {
                    center: {json var=$aMapDefaultCenter},
                    zoom: {Config::Get('plugin.maps.map_zoom')},
                    type: "yandex#map"
                });
                var myPlacemark;

                myMap.controls.add("typeSelector").add("mapTools").add("zoomControl").add("searchControl");

                {if ($_aRequest.fields.$field_id.1 != '')}
                myPlacemark = new ymaps.Placemark([ {$_aRequest.fields.$field_id.0}, {$_aRequest.fields.$field_id.1} ]);
                myMap.geoObjects.add(myPlacemark);
                myMap.setCenter([ {$_aRequest.fields.$field_id.0}, {$_aRequest.fields.$field_id.1} ]);
                {/if}

                myMap.events.add('click', function (e) {
                    var coords = e.get('coordPosition');
                    $("#item_lat").attr("value", coords[0].toPrecision(6));
                    $("#item_lng").attr("value", coords[1].toPrecision(6));
                    if(myPlacemark){
                        myMap.geoObjects.remove(myPlacemark);
                    }
                    myPlacemark = new ymaps.Placemark(coords);
                    myMap.geoObjects.add(myPlacemark);
                });
            });
        </script>

<div id="ItemMap" style="width:{Config::Get('plugin.maps.map_width')};height:{Config::Get('plugin.maps.map_height')};"></div>

<input type="hidden" id="item_lat" name="fields[{$oField->getFieldId()}][0]" value="{$_aRequest.fields.$field_id.0}"/>
<input type="hidden" id="item_lng" name="fields[{$oField->getFieldId()}][1]" value="{$_aRequest.fields.$field_id.1}"/>


</div>
<span class="note">{$oField->getFieldDescription()}</span>
</p>
0
Получилось только так (как описал выше). Собственно, после доработки напильником — работает, гугла не трогал, так как лень получать ключ.
Если интересны допы и фичи для карт яндекса: https://tech.yandex.ru/maps/doc/jsapi/2.0/ref/reference/Map-docpage/

На карты яндекса есть ограничение: «В бесплатной версии API суммарное число запросов не должно превышать 25 000 в сутки. В коммерческой версии этот лимит устанавливается тарифом.»
считается по формуле:
число запросов в Геокодер + число запросов в Маршрутизатор + 5 × число запросов к Панорамам
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.