Для CMS Joomla существует большое количество разнообразных компонентов, которые помогают расширить ее возможности и функциональность.
Одним из них является компонент K2, представляющий из себя конструктор контента, с его помощью Вы можете создать на своем сайте каталог неограниченной вложенности категорий, блог с возможностью комментирования записей и многое друге.
Если Вам необходимо показать местоположение какого-либо объекта или новости на карте, то было бы не плохо иметь возможность добавить ее в статьи компонента K2.
Существуют различные дополнения позволяющие это сделать, найти их можно в каталоге расширений Joomla ().
Плохо, то что все они платные.
После долгого поиска я нашел бесплатный плагин, с возможностью добавления карт Google Maps в статьи компонента K2.
Называется он K2 Maps и загрузить его можно здесь.
Он выводит статическую карту Google Maps в материале.
Прочитать о статических картах.
Как он работает?
Предположим что у Вас уже установлена последняя версия компонента K2 и русский язык для него (скачать можно на сайте разработчика http://getk2.org/ и языковый файл http://getk2.org/extend/translations ).
Устанавливаем, загруженный архив с плагином, стандартным способом через менеджер расширений.
Активируем установленный плагин K2 Plugin — Google Maps.
После этого при создании нового материала в компоненте K2, ниже окна для ввода текста страницы появляется форма для добавления параметров отображения карты Google Maps.
Опишу их подробнее.
Longitude — значение географической координаты долготы для метки;
Latitude — значение географической координаты широты для метки;
Marker Color — цвет значка маркера на карте;
Title of the position — текстовое обозначение на маркере (буквенное или цифровое);
Zoom — уровень масштаба карты;
Width of the map — ширина окна карты в пикселях;
Height of the map — высота окна карты в пикселях;
Map Type — тип отображения карты.
Для примера вводим следующие параметры:
Тогда при просмотре материала на сайте мы наблюдаем следующее:
Еще одним положительным моментом работы плагина является, что он успешно работает с версией компонента K2 в Joomla версий 1.5 и 2.5.
Для тестирования я использовал K2 версии 2.5.6 и плагина 1.1.1
Определить координаты для конкретного адреса можно используя специальный инструмент на моем блогге.
Вы вводите в строку поиска искомый адрес, нажимаете на кнопку «Найти», на карте найденный объект помечается маркером, а в низу в поле формы указаны его координаты. Можно также перемещать маркер по карте, в форме будут показываться его новые координаты.
Плагин конечно хороший, но иногда не достаточно статической карты, бывает нужно посмотреть что находится вокруг данного места, для этого необходимо использование динамической карты с возможностью изменения масштаба и панорамированием.
Давайте изменим исходных плагин так, чтобы было возможно использовать и динамический режим отображения карты.
Для этого нам необходимо отредактировать файлы плагина, расположенные в папке: <папка установки Joomla>/plugins/k2/.
С начала отредактируем файл maps.xml
Открываем его в тестовом редакторе и сразу после строки
<params group="item-content"> |
добавляем код для возможности выбора статической или динамической карты:
<param name="classmap" type="radio" default="1" label="Статический вид карты" description="Использовать статический вид карты"> <option value="0">Нет</option> <option value="1">Да</option> </param> |
И еще я заменил цвет одной метки с черного на розовый (Black на Pink).
После строки
<option value="yellow">Yellow</option> |
следующая стала иметь вид:
<option value="pink">Pink</option> |
Сохраняем измененный файл в кодировке UTF-8.
Теперь редактируем файл maps.php.
В нем сразу после строки
$plugins = new K2Parameter($item->plugins, '', $this->pluginName); |
добавляем строку для получения параметра classmap из формы в файле maps.xml
$vidmap = $plugins->get('classmap'); |
И теперь нужно добавить условие при котором когда $vidmap = 1 отображалась статическая карта, а иначе динамическая.
Для этого мы имеющийся код:
$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"/>'; |
заменяем на следующий:
if($vidmap == 1) { $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"/>'; } else { switch($color) { case 'green': $image = "http://www.google.com/intl/en_us/mapfiles/ms/micons/green-dot.png"; break; case 'blue': $image = "http://www.google.com/intl/en_us/mapfiles/ms/micons/blue-dot.png"; break; case 'yellow': $image = "http://www.google.com/intl/en_us/mapfiles/ms/micons/yellow-dot.png"; break; case 'pink': $image = "http://www.google.com/intl/en_us/mapfiles/ms/micons/pink-dot.png"; break; default: $image = "http://www.google.com/intl/en_us/mapfiles/ms/micons/red-dot.png"; } switch($type) { case 'satellite': $type_map = 'google.maps.MapTypeId.SATELLITE'; break; case 'terrain': $type_map = 'google.maps.MapTypeId.TERRAIN'; break; case 'hybrid': $type_map = 'google.maps.MapTypeId.HYBRID'; break; default: $type_map = 'google.maps.MapTypeId.ROADMAP'; } $output =' <script type="text/javascript" src="https://maps.google.com/maps/api/js?sensor=false"></script> <script type="text/javascript"> function initialize() { var myLatlng = new google.maps.LatLng('.$longitude.','.$latitude.'); var myOptions = { zoom: '.$zoom.', center: myLatlng, mapTypeId: '.$type_map.' } var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); var image = "'.$image.'"; var marker = new google.maps.Marker({ position: myLatlng, map: map, icon: image, title: "Здесь" }); } function loadScript() { var script = document.createElement("script"); script.type = "text/javascript"; script.src = "http://maps.google.com/maps/api/js?sensor=false&callback=initialize"; document.body.appendChild(script); } window.onload = loadScript; </script> <div id="map_canvas" style="width:'.$width.'px;height:'.$height.'px"></div>'; } |
В этом коде при $vidmap = 1 как и прежде отображается статическая карта, а иначе формируется код для вывода динамической карты.
Отображается карта с меткой заданного цвета.
Title of the position — текстовое обозначение на маркере (буквенное или цифровое);
Не зависимо от того вписываю или нет текстовое обозначение маркера, при наведении на него отображается слово «Здесь». Можно ли как-нибудь вылечить?
Можно, если в место строки определения текста для маркера title: «Здесь» написать следующий код:
title: «‘.$marker.'»
И еще вопрос, а нельзя карты от гугла заменить яндекс картами, с сохранением всех полей. Другими словами, сейчас есть 150 статей в которые вставлена карта гугл, как то бы заменить ее на карту яндекс с минимальными трудозатратами, это возможно или нет?
Спасибо.
Да возможно. Нужно заменить код карты в файле map.php на код для API Яндекс.Карт. Значения координат широты и долготы поменять местами.
Если Вы будете использовать API Яндекс.Карт 1.1, то необходимо будет прямо в коде прописать ключ для вашего сайта.
Спасибо большое, попытаюсь сделать!
А если в Вас найдется время интегрировать карту Яндекс, то, я думаю, получится еще одна интересная и полезная статья не только для меня, но и для всех пользователей Joomla + K2
Однако у меня получилось, на все про все ушло минут 10, еще раз спасибо.
А множество меток поддерживается? Например, надо вывести все объекты на карту, такое возможно? Заранее спасибо за ответ.
Здравствуйте!
Спасибо за модификацию, супер плагин.
Настроил и включил модифицированый плагин, все работает отлично. Но появился баг,в позиции где находится ссылка на статью с картой, постоянно на всех страницах статей К2 появляется карта 🙂 . Возможно Вы уже сталкивались с подобным глюком, как его решить?