Карты в топиках/статьях
Последнее обновление:
8 мая 2015
Совместимость:
AltoCMS 1.0.+
Версия: 1.1.5
Скачан: 6137 раз
Добавил: aVadim
Описание
Позволяет добавлять карту с меткой к статьям в Alto CMSДоступны Google/Яндекс карты на выбор (в конфиге).
Этот плагин является адаптацией плагина altocms.ru/addons/item/48/ для Alto CMS 1.0 и выше.
Установка
1) Устанавливаем плагин стандартным способом2) В администраторской панели переходим в меню «типы контента»
3) Нажимаем «редактировать» напротив типа контента, к которому будет присоединено поле карт
4) Нажмаем «добавить поле». Выбираем в выпадающем списке «Карта», прописываем название поля, например «Место встречи», и пояснение-подсказку к нему «Отметьте место встречи на карте»
5) Сохраняем поле. При необходимости обычным перетаскиванием можно изменить порядок поля среди остальных полей на необходимый вам
6) В конфиге плагина /maps/config/config.php можно выбрать какой тип карт использовать — Яндекс или Google
Отключение плагина
ВАЖНО! ДО отключения плагина, нужно отредактировать типы контента, куда добавлено поле «Карта», удалив его. И только ПОСЛЕ этого можно отключать сам плагин.10 комментариев
0
Сейчас на последней 1.1.8 с гита вообще перестал работать:( Т.е. новый тип топика публикуется, но карта потом в нем не отображается.
Отредактирован:
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
Первая ошибка — путь скрипта должен быть:
далее в show.tpl меняем ymap на myMap, т.е. строки 8, 18, 32, 46 и 50
аналогично и с edit.tpl. Код выложить не получается — бот ругается на комментарий.
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 × число запросов к Панорамам
Если интересны допы и фичи для карт яндекса: https://tech.yandex.ru/maps/doc/jsapi/2.0/ref/reference/Map-docpage/
На карты яндекса есть ограничение: «В бесплатной версии API суммарное число запросов не должно превышать 25 000 в сутки. В коммерческой версии этот лимит устанавливается тарифом.»
считается по формуле:
число запросов в Геокодер + число запросов в Маршрутизатор + 5 × число запросов к Панорамам
Отредактирован:
Работает, но, не меняется на гугл.