В прошлый раз я рассказал вам о плагине добавления карт Google Maps в статьи компонента K2 на сайте Joomla.
Теперь давайте изменим наш плагин так, чтобы можно было вместо карт Google Maps использовать Яндекс.Карты.
Мы будем использовать два вида отображения Яндекс.Карт — статические и динамические.
С начала мы будем использовать API Яндекс.Карт версии 1.1., а затем для динамической карты применим недавно вышедшее API 2.0.
Загрузим архив с плагином из предидущей заметки
Первым мы отредактируем файл maps.xml
В нем мы должны добавить поле для ввода ключа к API Яндекс.Карт.
Между строчками
<params> </params> |
добавляем строку кода:
<param name="apikey" type="text" size= "40" default="" label="API ключ Яндекса" description="API ключ Яндекса. Вы должны получить его здесь: http://api.yandex.ru/maps/form.xml" /> |
Затем изменяем обозначения параметров для цветов меток статической Яндекс.Карты (посмотреть обозначения можно здесь )
Вместо участка кода:
<option value="red">Red</option> <option value="green">Green</option> <option value="blue">Blue</option> <option value="yellow">Yellow</option> <option value="pink">Pink</option> |
у нас будет:
<option value="rd">Red</option> <option value="gn">Green</option> <option value="bl">Blue</option> <option value="yw">Yellow</option> <option value="pn">Pink</option> |
Далее удаляем лишние уровни масштаба от 18 по 21, т. к. у Яндекс.Карт максимальный уровень 17.
Также переопределяем типы карты заменяя код:
<option value="roadmap">Roadmap</option> <option value="satellite">Satellite </option> <option value="terrain">Terrain</option> <option value="hybrid">Hybrid</option> |
на следующий:
<option value="map">Roadmap</option> <option value="sat">Satellite </option> <option value="sat,skl">Hybrid</option> |
После этого, сохраняем измененный файл maps.xml.
Теперь редактируем файл maps.php
Раз мы добавили новый параметр для ключа API, нужно сначала получить его значение.
Для этого сразу после строки
$view = Jrequest::getCmd('view'); |
добавляем строчку:
$apikey = $pluginParams->get('apikey'); |
А также заменяем строку кода:
if ($longitude=="") { |
на
if ($apikey=="") { |
Мы здесь будем проверять присутствует или нет параметр ключа API.
Далее, если установлен режим использования статической карты, мы должны сформировать запрос для ее отображения.
Для этого код:
$output = '<img src="http://maps.google.com/maps/api/staticmap?center='.$longitude.','.$latitude.'&zoom='.$zoom.'&size='.$width.'x'.$height.'&maptype='.$type.' &markers=color:'.$color.'|label:'.$marker.'|'.$longitude.','.$latitude.'&sensor=false"/>'; |
заменяем следующим:
$output = '<img src="http://static-maps.yandex.ru/1.x/?ll='.$latitude.','.$longitude.'&size='.$width.','.$height.'&z='.$zoom.'&l='.$type.'&pt='.$latitude.','.$longitude.',pm'.$color.'m'.$marker.'&key='.$apikey.'"/>'; |
Подробнее о статических картах можно прочитать в документации.
Для отображения динамической Яндекс.Карты, мы заменим весь код внутри условия else на следующий:
switch($color)
{
case 'gn': $style = "default#greenPoint";
break;
case 'bl': $style = "default#bluePoint";
break;
case 'yw': $style = "default#yellowPoint";
break;
case 'pn': $style = "default#pinkPoint";
break;
default: $style = "default#redPoint";
}
switch($type)
{
case 'sat': $type_map = 'YMaps.MapType.SATELLITE';
break;
case 'sat,skl': $type_map = 'YMaps.MapType.HYBRID';
break;
default: $type_map = 'YMaps.MapType.MAP';
}
$output ='<script src="http://api-maps.yandex.ru/1.1/index.xml?key='.$apikey.'" type="text/javascript"></script>
<script type="text/javascript">
// Создание обработчика для события window.onLoad
YMaps.jQuery(function () {
var map = new YMaps.Map(YMaps.jQuery("#YMapsID")[0]);
map.setCenter(new YMaps.GeoPoint('.$latitude.','.$longitude.'), '.$zoom.');
map.setType('.$type_map.');
map.addControl(new YMaps.TypeControl());
map.addControl(new YMaps.ToolBar());
map.addControl(new YMaps.Zoom());
var placemark = new YMaps.Placemark(new YMaps.GeoPoint('.$latitude.','.$longitude.'), {style:"'.$style.'"});
map.addOverlay(placemark);
})
</script>
<div id="YMapsID" style="width:'.$width.'px;height:'.$height.'px;"></div>'; |
Сохраняем файл maps.php
Скачать архив с версией плагина для Яндекс.Карт.
Теперь изменим код вывода динамической Яндекс.Карты, чтобы использовать возможности API Яндекс.Карт версии 2.0.
Заменяем в файле map.php код вывода динамической Яндекс.Карты на следующий:
switch($color)
{
case 'gn': $style = "twirl#greenIcon";
break;
case 'bl': $style = "twirl#blueIcon";
break;
case 'yw': $style = "twirl#yellowIcon";
break;
case 'pn': $style = "twirl#pinkIcon";
break;
default: $style = "twirl#redIcon";
}
switch($type)
{
case 'sat': $type_map = 'yandex#satellite';
break;
case 'sat,skl': $type_map = 'yandex#hybrid';
break;
case 'pmap': $type_map = 'yandex#publicMap';
break;
case 'sat,pskl': $type_map = 'yandex#publicMapHybrid';
break;
default: $type_map = 'yandex#map';
}
$output ='<script src="http://api-maps.yandex.ru/2.0/?load=package.full&lang=ru-RU" type="text/javascript"></script>
<script type="text/javascript">
ymaps.ready(init);
function init () {
var myMap = new ymaps.Map("map", {
center: ['.$longitude.','.$latitude.'],
zoom: '.$zoom.',
type: "'.$type_map.'"
});
myMap.controls
// Кнопка изменения масштаба
.add("zoomControl")
// Список типов карты
.add("typeSelector")
// Стандартный набор кнопок
.add("mapTools");
myPlacemark = new ymaps.Placemark(['.$longitude.','.$latitude.'], {iconContent: "'.$marker.'"}, {preset: "'.$style.'"});
myMap.geoObjects.add(myPlacemark);
}
</script>
<div id="map" style="width:'.$width.'px;height:'.$height.'px;"></div>'; |
Сохраняем изменения.
Нам также необходимо изменить файл maps.xml
Мы добавим в него при выборе типа карты еще два новых: Народная карта (PublicMap) и гибрид Народной карты (PublicMapHybrid).
Т.е код выбора типа карты будет иметь вид:
<param name="type" type="list" default="roadmap" label="Map Type" description="Please select a map type!" > <option value="map">Roadmap</option> <option value="sat">Satellite </option> <option value="sat,skl">Hybrid</option> <option value="pmap">PublicMap</option> <option value="sat,pskl">PublicMapHybrid</option> </param> |
Сохраняем файл maps.xml
Загрузить архив с измененой версией плагина.
Посмотрим на примере как работает наш плагин.
После установки новой версии плагина в его параметрах появилось новое поле API ключ Яндекса
Добавляем карту к заметке.
Вид статической карты
Вид динамической карты
Вид динамической карты с API Яндекс.Карт версии 2.0.




Отлично то как! А существуют ли подобные плагины для добавления в статьи joomla полилинии по заданному массиву координат?
Плагины для K2 существуют, но во-первых они платные, а во-вторых все используют Google Maps.
Можно доработать плагин для Яндекс.Карт для K2, если добавить поле для ввода пути к YMapsML-файлу.
Добрый день все замечательно работает
есть вопрос как сделать народную карту по умолчанию
и изменение масштаба колесиком мышки
сорри народную карту по умолчанию разобрался
Чтобы работало изменение масштаба колесиком мышки необходимо в код файла maps.php добавить две строчки:
после строки type: «‘.$type_map.'» через запятую строку behaviors: [«default», «scrollZoom»]
А перед строчками определения метки на карте:
myMap.behaviors.enable("ruler");Не работает. Гугл работает, а эти два варианта нет.
Может из joomla 2.5.9 и K2 2.6.5?
Не поможете?
Неужели автор статьи даже предположить ничего не может?
Нашел ошибку в плагине, переделал. Все отлично работает. Теперь даже не обязательно указывать ключ к API Яндекс.Карт для статической карты.
Загрузить плагин можно отсюда